Bagaimana saya bisa membuat regex berikut mengabaikan sensitivitas case? Itu harus cocok dengan semua karakter yang benar tetapi mengabaikan apakah itu huruf kecil atau besar.
Perhatikan bahwa untuk grepitu hanya penambahan -ipengubah. Contoh: grep -rni regular_expressionuntuk mencari 'regular_expression' 'ini secara berulang, beri huruf' i 'tidak sensitif, menunjukkan baris' tidak ada dalam hasilnya.
Gabriel Staples
Jawaban:
444
Dengan asumsi Anda ingin seluruh regex mengabaikan kasus, Anda harus mencari ibendera . Hampir semua mesin regex mendukungnya:
/G[a-b].*/i
string.match("G[a-b].*","i")
Periksa dokumentasi untuk bahasa / platform / alat Anda untuk menemukan bagaimana mode yang cocok ditentukan.
Jika Anda hanya ingin sebagian regex tidak peka huruf besar-kecil (seperti dugaan awal saya), maka Anda memiliki dua opsi:
Gunakan modifier mode (?i)dan [opsional] (?-i):
(?i)G[a-b](?-i).*
Masukkan semua variasi (yaitu huruf kecil dan huruf besar) di regex - berguna jika pengubah mode tidak didukung:
[gG][a-bA-B].*
Satu catatan terakhir: jika Anda berurusan dengan karakter Unicode selain ASCII, periksa apakah mesin regex Anda mendukungnya atau tidak.
Cemerlang! Bekerja untuk: perl -pe's / ^ utf-8 \? B \?. * $ // gi 'Cancer.1631, mencocokkan / mengganti string "UTF-8? B?" dalam file Cancer.1631. Ini gagal: perl -pe 's / ^ utf-8 \? B \?. * $ // g' Cancer.1631, karena kasus ketidakcocokan.
Victoria Stuart
Posting ini akan jauh lebih jelas jika itu bukan contoh spesifik. Seperti bagaimana jika Anda ingin mengabaikan huruf besar untuk kata lain seperti ".txt" dan ".TXT". Dari melihat jawaban ini saya masih tidak yakin bagaimana saya bisa melakukan ini.
Kyle Bridenstine
Untuk beberapa alasan regex yang Anda posting tidak berfungsi dalam findregex diperpanjang .. misalnya find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)tidak menampilkan folder .. putih yang serupa find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)tanpa pengubah menunjukkan folder yang benar. Ada yang tahu kenapa?
alpha_989
Di sini saya mencoba untuk menemukan semua folder dimulai dengan karakter [a-c]di folder saat ini saja .. untuk melakukan manipulasi lebih lanjut ..
alpha_989
Jujur saya akan menempatkan opsi 2 di bagian utama dari jawaban karena generik dan bekerja dengan semua mesin regex.
Puterdo Borato
154
Tergantung pada implementasi tetapi saya akan gunakan
(?i)G[a-b].
VARIASI:
(?i)case-insensitive mode ON
(?-i)case-insensitive mode OFF
Rasa regex modern memungkinkan Anda untuk menerapkan pengubah hanya sebagian dari ekspresi reguler. Jika Anda memasukkan pengubah (? Im) di tengah regex maka pengubah hanya berlaku untuk bagian dari regex di sebelah kanan pengubah. Dengan rasa ini, Anda dapat mematikan mode dengan mendahului mereka dengan tanda minus (? -I).
Ini adalah format pengubah untuk mesin regex Pencarian TortoiseHg.
mwolfe02
Bisakah Anda memberi tahu saya bagaimana ini dapat dicapai dalam shell Linux (katakanlah di egrep tanpa menggunakan saklar "-i") secara umum?
Krishna Gupta
1
Menjelaskan apa yang (?i)dilakukan dan bagaimana mengakhirinya ( (?-i)) akan sangat membantu. Itulah sebabnya mengapa jawaban Anda memiliki 1/3 suara sebanyak pertanyaan # 1 daripada hampir sebanyak, karena mereka menjelaskan detail halus ini.
Gabriel Staples
55
ekspresi reguler untuk memvalidasi 'abc' dengan mengabaikan case sensitif
Adakah yang bisa menjelaskan kepada saya mengapa postingan ini diturunkan? Solusi yang diterima menggunakan kode spesifik dan demi kelengkapan saya ingin menambahkan solusi untuk perpustakaan standar bahasa c ++. Menurut pendapat saya, saya telah menghasilkan nilai tambah untuk pertanyaan yang lebih umum.
Frankenstein
5
Seperti yang saya temukan dari posting serupa ini ( ignorecase di AWK ), pada versi awk lama (seperti pada vanilla Mac OS X), Anda mungkin perlu menggunakan 'tolower($0) ~ /pattern/'.
IGNORECASEatau (?i)atau /pattern/iakan menghasilkan kesalahan atau mengembalikan true untuk setiap baris.
ingin tahu mengapa jawaban ini salah untuk pertanyaan yang diberikan?
alpha_989
Anda memilikinya dalam jawaban Anda "tidak terlalu rumit atau panjang"
reggaeguitar
Ini sebenarnya satu-satunya solusi yang berhasil untuk kasus saya. Juga sepertinya solusi paling umum yang bisa digunakan di mana saja. Semua jawaban lain tampaknya sangat spesifik untuk implementasi regex tertentu.
Puterdo Borato
1
Tambahan untuk jawaban yang sudah diterima:
Grep penggunaan:
Perhatikan bahwa untuk grepitu hanya penambahan -ipengubah. Contoh: grep -rni regular_expressionuntuk mencari 'regular_expression' 'ini secara berulang, beri huruf' i 'tidak sensitif, menunjukkan baris' tidak ada dalam hasilnya.
Juga, inilah alat yang hebat untuk memverifikasi ekspresi reguler: https://regex101.com/
Contoh: Lihat ekspresi dan Penjelasan dalam gambar ini.
Anda dapat berlatih Regex Di Visual Studio dan Visual Studio Code menggunakan find / replace.
Anda harus memilih Match Case dan Regular Expressions untuk ekspresi regex dengan case. Lain [AZ] tidak akan berfungsi. Masukkan deskripsi gambar di sini
Anda juga dapat mengarahkan string awal Anda, yang akan Anda periksa untuk pencocokan pola, ke huruf kecil. Dan menggunakan simbol pola huruf kecil Anda masing-masing.
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
.grep
itu hanya penambahan-i
pengubah. Contoh:grep -rni regular_expression
untuk mencari 'regular_expression' 'ini secara berulang, beri huruf' i 'tidak sensitif, menunjukkan baris' tidak ada dalam hasilnya.Jawaban:
Dengan asumsi Anda ingin seluruh regex mengabaikan kasus, Anda harus mencari
i
bendera . Hampir semua mesin regex mendukungnya:Periksa dokumentasi untuk bahasa / platform / alat Anda untuk menemukan bagaimana mode yang cocok ditentukan.
Jika Anda hanya ingin sebagian regex tidak peka huruf besar-kecil (seperti dugaan awal saya), maka Anda memiliki dua opsi:
Gunakan modifier mode
(?i)
dan [opsional](?-i)
:Masukkan semua variasi (yaitu huruf kecil dan huruf besar) di regex - berguna jika pengubah mode tidak didukung:
Satu catatan terakhir: jika Anda berurusan dengan karakter Unicode selain ASCII, periksa apakah mesin regex Anda mendukungnya atau tidak.
sumber
find
regex diperpanjang .. misalnyafind . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)
tidak menampilkan folder .. putih yang serupafind . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)
tanpa pengubah menunjukkan folder yang benar. Ada yang tahu kenapa?[a-c]
di folder saat ini saja .. untuk melakukan manipulasi lebih lanjut ..Tergantung pada implementasi tetapi saya akan gunakan
VARIASI:
Rasa regex modern memungkinkan Anda untuk menerapkan pengubah hanya sebagian dari ekspresi reguler. Jika Anda memasukkan pengubah (? Im) di tengah regex maka pengubah hanya berlaku untuk bagian dari regex di sebelah kanan pengubah. Dengan rasa ini, Anda dapat mematikan mode dengan mendahului mereka dengan tanda minus (? -I).
Deskripsi berasal dari halaman: https://www.regular-expressions.info/modifiers.html
sumber
(?i)
dilakukan dan bagaimana mengakhirinya ((?-i)
) akan sangat membantu. Itulah sebabnya mengapa jawaban Anda memiliki 1/3 suara sebanyak pertanyaan # 1 daripada hampir sebanyak, karena mereka menjelaskan detail halus ini.ekspresi reguler untuk memvalidasi 'abc' dengan mengabaikan case sensitif
sumber
The
i
flag biasanya digunakan untuk kasus ketidakpekaan. Anda tidak memberi bahasa di sini, tetapi mungkin akan seperti/G[ab].*/i
atau/(?i)G[ab].*/
.sumber
Demi kelengkapan, saya ingin menambahkan solusi untuk ekspresi reguler di C ++ dengan Unicode:
sumber
Seperti yang saya temukan dari posting serupa ini ( ignorecase di AWK ), pada versi awk lama (seperti pada vanilla Mac OS X), Anda mungkin perlu menggunakan
'tolower($0) ~ /pattern/'
.IGNORECASE
atau(?i)
atau/pattern/i
akan menghasilkan kesalahan atau mengembalikan true untuk setiap baris.sumber
C #
khusus: opsi: RegexOptions.IgnoreCase
sumber
[gG] [aAbB]. * mungkin solusi sederhana jika polanya tidak terlalu rumit atau panjang.
sumber
Tambahan untuk jawaban yang sudah diterima:
Grep penggunaan:
Perhatikan bahwa untuk
grep
itu hanya penambahan-i
pengubah. Contoh:grep -rni regular_expression
untuk mencari 'regular_expression' 'ini secara berulang, beri huruf' i 'tidak sensitif, menunjukkan baris' tidak ada dalam hasilnya.Juga, inilah alat yang hebat untuk memverifikasi ekspresi reguler: https://regex101.com/
Contoh: Lihat ekspresi dan Penjelasan dalam gambar ini.
Referensi:
man grep
)sumber
Di Jawa,
Regex
konstruktor memilikiJadi, untuk mengabaikan kasus, gunakan
sumber
Anda dapat berlatih Regex Di Visual Studio dan Visual Studio Code menggunakan find / replace.
Anda harus memilih Match Case dan Regular Expressions untuk ekspresi regex dengan case. Lain [AZ] tidak akan berfungsi. Masukkan deskripsi gambar di sini
sumber
Anda juga dapat mengarahkan string awal Anda, yang akan Anda periksa untuk pencocokan pola, ke huruf kecil. Dan menggunakan simbol pola huruf kecil Anda masing-masing.
sumber