Regex: abaikan sensitivitas case

316

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.

G[a-b].*
saudara
sumber
Hanya memasukkan huruf besar dan kecil dalam regex atau mengubahnya menjadi huruf besar sebelum melakukan pencocokan regex
Chetter Hummin
2
G [a-bA-B]. * Akan menjadi jelas dalam kasus umum ini, sensitivitas case tergantung pada platform dan Anda tidak memberikan platform.
Joachim Isaksson
16
Jika Anda menggunakan Java, Anda dapat menentukan ini dengan kelas Pola: Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);.
james.garriss
Lebih banyak opsi Java di sini: blogs.oracle.com/xuemingshen/entry/…
james.garriss
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:

  1. Gunakan modifier mode (?i)dan [opsional] (?-i):

    (?i)G[a-b](?-i).*
  2. 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.

mgibsonbr
sumber
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).

Deskripsi berasal dari halaman: https://www.regular-expressions.info/modifiers.html

elrado
sumber
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

(?i)(abc)
Ravinath
sumber
1
Berfungsi sempurna dengan logcat Android Studio
Joe
Bekerja dengan python juga
conner.xyz
47

The iflag biasanya digunakan untuk kasus ketidakpekaan. Anda tidak memberi bahasa di sini, tetapi mungkin akan seperti /G[ab].*/iatau /(?i)G[ab].*/.

chooban
sumber
15

Demi kelengkapan, saya ingin menambahkan solusi untuk ekspresi reguler di C ++ dengan Unicode:

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);

if (std::tr1::regex_match(szString, pattern))
{
...
}
Frankenstein
sumber
1
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.

senortim
sumber
2

C #

using System.Text.RegularExpressions;
...    
Regex.Match(
    input: "Check This String",
    pattern: "Regex Pattern",
    options: RegexOptions.IgnoreCase)

khusus: opsi: RegexOptions.IgnoreCase

DonkeyKong
sumber
1

[gG] [aAbB]. * mungkin solusi sederhana jika polanya tidak terlalu rumit atau panjang.

alpha_989
sumber
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.

masukkan deskripsi gambar di sini

Referensi:

Gabriel Staples
sumber
0

Di Jawa, Regexkonstruktor memiliki

Regex(String pattern, RegexOption option)

Jadi, untuk mengabaikan kasus, gunakan

option = RegexOption.IGNORE_CASE
Aziz
sumber
0

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

Visual Studio 2019 Community

David Morrow
sumber
-2

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.

Alexander Drobyshevsky
sumber