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].*

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.


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


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)

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].*/.


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))
{
...
}

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.


2

C #

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

khusus: opsi: RegexOptions.IgnoreCase


1

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


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:


0

Di Jawa, Regexkonstruktor memiliki

Regex(String pattern, RegexOption option)

Jadi, untuk mengabaikan kasus, gunakan

option = RegexOption.IGNORE_CASE

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.