Apa yang setara dengan pola .gitignore dari regex (Besar | Kecil) (Negara | Kota) - [0-9] * \. Csv

23

Saya memiliki regex yang saya tempel di .gitignoremirip dengan:

(Big|Small)(State|City)-[0-9]*\.csv

Itu tidak berhasil jadi saya mengujinya terhadap RegexLab.NET .

Saya kemudian menemukan halaman manual gitignore yang membuat saya mengetahui bahwa gitignore tidak menggunakan regex , melainkan fnmatch (3) .

Namun, tampaknya tidak memiliki yang setara dengan kelompok tangkapan. Apakah ini layak atau apakah saya perlu memecah ini menjadi tiga baris?

Justin Dearing
sumber

Jawaban:

26

Tidak ada cara untuk mengekspresikan ekspresi reguler ini dengan pola yang didukung gitignore. Masalahnya bukan kurangnya kelompok penangkapan (pada kenyataannya, Anda tidak menggunakan kelompok penangkapan seperti itu), masalahnya adalah kurangnya |operator. Anda perlu memecah ini menjadi empat baris.

BigState-[0-9]*.csv
SmallState-[0-9]*.csv
BigCity-[0-9]*.csv
SmallCity-[0-9]*.csv

Perhatikan bahwa polanya cocok misalnya BigState-4foo.csv, karena *cocok dengan urutan karakter apa pun. Anda tidak dapat melakukan lebih baik dari ini dengan pola gumpalan, kecuali jika Anda bersedia untuk mencocokkan hanya sejumlah digit.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Saya akhirnya melakukan persis apa yang Anda katakan. Juga, terima kasih telah menunjukkan * tidak mengulangi ekspresi sebelumnya, tetapi kartu sementara. Cukup bagus untuk kebutuhan saya, tetapi saya berharap lebih baik.
Justin Dearing