Normal ifade: büyük / küçük harfe duyarlılığı yoksay


316

Aşağıdaki normal ifadenin büyük / küçük harfe duyarlılığı nasıl yoksaymasını sağlayabilirim? Tüm doğru karakterlerle eşleşmeli, ancak küçük veya büyük harf olup olmadıklarını göz ardı etmelidir.

G[a-b].*


2
G [a-bA-B]. * Bu genel durumda açıktır, büyük / küçük harf duyarlılığı afaik platforma bağlıdır ve bir platform vermiyorsunuz.
Joachim Isaksson

16
Java kullanıyorsanız, sen Desen sınıfıyla bu belirtebilirsiniz: Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);.
james.garriss

Burada daha fazla Java seçeneği: blogs.oracle.com/xuemingshen/entry/…
james.garriss

Bunu yapmak için grepbasitçe -ideğiştiricinin eklenmesi olduğunu unutmayın . Örn: grep -rni regular_expressionbu 'düzenli_ifade' 'tekrarlı olarak aramak için, sonuçta' n'umbers 'satırı gösteren' i'nsensitive 'durumu.
Gabriel Staples

Yanıtlar:


444

Tüm regex'in durumu görmezden gelmesini istediğinizi varsayarsak , ibayrağı aramalısınız . Neredeyse tüm normal regex motorları bunu destekliyor:

/G[a-b].*/i

string.match("G[a-b].*", "i")

Eşleştirme modlarının nasıl belirlendiğini bulmak için dilinizin / platformunuzun / aracınızın belgelerine bakın.

Normal ifadenin yalnızca bir kısmının büyük / küçük harfe duyarsız olmasını istiyorsanız (orijinal yanıtım varsayıldığı gibi), iki seçeneğiniz vardır:

  1. Kullanım (?i)ve [seçime bağlı olarak] (?-i)mod değiştiricileri:

    (?i)G[a-b](?-i).*
  2. Tüm varyasyonları (küçük harf ve büyük harf) normal ifadeye koyun - mod değiştiricileri desteklenmiyorsa yararlıdır:

    [gG][a-bA-B].*

Son bir not: ASCII dışında Unicode karakterlerle uğraşıyorsanız, normal ifade motorunuzun bunları doğru bir şekilde destekleyip desteklemediğini kontrol edin.


Parlak! Şunun için çalışır: perl -pe 's / ^ utf-8 \? B \?. * $ // gi' Cancer.1631, eşleme / değiştirme "UTF-8? B?" Kanser dosyasında. Bu başarısız: perl -pe 's / ^ utf-8 \? B \?. * $ // g' Kanser.1631, vaka uyuşmazlığı nedeniyle.
Victoria Stuart

Bu yazı, bu kadar spesifik bir örnek olmasaydı çok daha net olurdu. ".Txt" ve ".TXT" gibi başka bir kelime için büyük / küçük harf kullanımını göz ardı etmek istediğinizde olduğu gibi. Bu cevaba baktığımda bunu nasıl yapabileceğime hâlâ emin değilim.
Kyle Bridenstine

Herhangi bir nedenle, gönderdiğiniz normal ifade findgenişletilmiş normal find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)ifadeyle çalışmaz .. örneğin herhangi bir klasör göstermez .. beyaz find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)değiştiriciler olmadan benzer bir reged doğru klasörleri gösterir. Neden olduğu hakkında bir fikrin var mı?
alpha_989

Burada [a-c]sadece geçerli klasördeki karakterlerle başlayan tüm klasörleri bulmaya çalışıyorum .. biraz daha manipülasyon yapmak için ..
alpha_989

Dürüst olmak gerekirse, genel ve tüm regex motorları ile çalıştığı için cevabın ana kısmına 2. seçeneği koyardım.
Puterdo Borato

154

Uygulamaya bağlı ama ben kullanırım

(?i)G[a-b].

DEĞİŞİMLER:

(?i) case-insensitive mode ON    
(?-i) case-insensitive mode OFF

Modern regex aromaları, normal ifadenin sadece bir kısmına değiştiriciler uygulamanızı sağlar. Değiştiriciyi (? İm) normal ifadenin ortasına yerleştirirseniz, değiştirici yalnızca değiştiricinin sağındaki normal ifadeye uygulanır. Bu lezzetlerle, modlardan önce eksi işareti (? -İ) ile kapatabilirsiniz.

Açıklama sayfadan: https://www.regular-expressions.info/modifiers.html


Bu, TortoiseHg'nin Arama normal ifadesi motoru için değiştirici biçimidir.
mwolfe02

Bunun Linux kabuğunda nasıl elde edilebileceğini söyleyebilir misiniz ("-i" anahtarını kullanmadan egrep'te söyleyin)?
Krishna Gupta

1
Ne yaptığını (?i)ve nasıl sona erdirileceğini ( (?-i)) açıklamak gerçekten yararlı olurdu. Bu, cevabınızın neden bu ince ayrıntıyı açıkladıkları kadar neredeyse 1 numaralı soru yerine 1/3 kadar oy verdiğini aşağıya çekiyor.
Gabriel Staples

55

büyük / küçük harf duyarlılığını yoksayarak 'abc' değerini doğrulamak için düzenli ifade

(?i)(abc)

1
Android Studio logcat ile mükemmel çalışır
Joe


47

iBayrak normalde durum duyarsızlığı için kullanılmaktadır. Burada bir dil vermiyorsunuz, ama muhtemelen /G[ab].*/iveya gibi bir şey olacak /(?i)G[ab].*/.


15

Sadece tamlık uğruna Unicode ile C ++ 'da düzenli ifadeler için çözüm eklemek istedim:

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

if (std::tr1::regex_match(szString, pattern))
{
...
}

1
Birisi bana bu yazının neden reddedildiğini açıklayabilir mi? Kabul edilen çözüm belirli bir kod kullanır ve tamlık uğruna c ++ dilinin standart kitaplıkları için çözüm eklemek istedim. Bence daha genel bir soruya katma değer ürettim.
Frankenstein

5

Bu benzer yazıdan ( AWK'da ignorecase ) keşfettiğim gibi, awk'ın eski sürümlerinde (vanilya Mac OS X gibi) kullanmanız gerekebilir 'tolower($0) ~ /pattern/'.

IGNORECASEveya (?i)ya /pattern/ibir hata oluşturur ya da her satır için true değerini döndürür.


2

C #

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

özellikle: seçenekler: RegexOptions.IgnoreCase


1

[gG] [aAbB]. * desen çok karmaşık veya uzun değilse muhtemelen çözümü basitleştirir.


bu sorunun verilen soru için neden yanlış olduğunu bilmek ister misiniz?
alpha_989

Cevabınız var "çok karmaşık veya uzun değil"
reggaeguitar

Bu benim durumum için işe yarayan tek çözüm. Ayrıca her yerde çalışması gereken en genel çözüm gibi görünüyor. Diğer tüm cevaplar, belirli normal ifade uygulamaları için çok spesifik görünmektedir.
Puterdo Borato

1

Önceden kabul edilmiş cevaplara ek:

Grep kullanımı:

Bunu yapmak için grepbasitçe -ideğiştiricinin eklenmesi olduğunu unutmayın . Örn: grep -rni regular_expressionbu 'düzenli_ifade' 'tekrarlı olarak aramak için, sonuçta' n'umbers 'satırı gösteren' i'nsensitive 'durumu.

Ayrıca, düzenli ifadeleri doğrulamak için harika bir araç: https://regex101.com/

Örn: Bu görüntüdeki ifadeye ve açıklamaya bakın.

resim açıklamasını buraya girin

Referanslar:


0

Java'da, Regexyapıcı

Regex(String pattern, RegexOption option)

Durumları görmezden gelmek için

option = RegexOption.IGNORE_CASE

0

Bul / değiştir işlevini kullanarak Visual Studio ve Visual Studio Code'da Regex uygulayabilirsiniz.

Büyük / küçük harf regex ifadeleri için Büyük / Küçük Harf Eşleştir ve Normal İfadeleri seçmeniz gerekir. Başka [AZ] çalışmaz. Buraya resim açıklaması girin

Visual Studio 2019 Topluluğu


-2

Desen eşleşmesini kontrol edeceğiniz ilk dizenizi küçük harfe yönlendirebilirsiniz. Ve deseninizde sırasıyla küçük harf sembollerini kullanarak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.