Regex: Groß- und Kleinschreibung ignorieren

316

Wie kann ich den folgenden regulären Ausdruck dazu bringen, die Groß- und Kleinschreibung zu ignorieren? Es sollte mit allen richtigen Zeichen übereinstimmen, aber ignorieren, ob sie in Klein- oder Großbuchstaben geschrieben sind.

G[a-b].*
Bruder
quelle
Lassen Sie einfach sowohl Groß- als auch Kleinbuchstaben in den
regulären Ausdruck aufnehmen
2
G [a-bA-B]. * Wäre in diesem allgemeinen Fall offensichtlich. Die Groß- und Kleinschreibung hängt von der Plattform ab und Sie geben keine Plattform an.
Joachim Isaksson
16
Wenn Sie Java verwenden, können Sie dies mit der Pattern-Klasse angeben : Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);.
James.garriss
Weitere Java-Optionen hier: blogs.oracle.com/xuemingshen/entry/…
james.garriss
Beachten Sie, dass grepes sich lediglich um das Hinzufügen des -iModifikators handelt. Beispiel: grep -rni regular_expressionUm rekursiv nach diesem 'regulären_Ausdruck' zu suchen, muss der Fall 'i'unempfindlich sein und die Zeile' n'Zahlen im Ergebnis anzeigen.
Gabriel Staples

Antworten:

444

Angenommen, Sie möchten, dass der gesamte reguläre Ausdruck die Groß- und Kleinschreibung ignoriert, sollten Sie nach der iFlagge suchen . Fast alle Regex-Engines unterstützen dies:

/G[a-b].*/i

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

Überprüfen Sie die Dokumentation Ihrer Sprache / Plattform / Ihres Tools, um herauszufinden, wie die Übereinstimmungsmodi angegeben sind.

Wenn Sie möchten, dass nur ein Teil des regulären Ausdrucks die Groß- und Kleinschreibung nicht berücksichtigt (wie in meiner ursprünglichen Antwort angenommen), haben Sie zwei Möglichkeiten:

  1. Verwenden Sie die Modifikatoren (?i)und [optional] (?-i):

    (?i)G[a-b](?-i).*
  2. Fügen Sie alle Variationen (dh Klein- und Großbuchstaben) in den regulären Ausdruck ein - nützlich, wenn Modusmodifikatoren nicht unterstützt werden:

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

Ein letzter Hinweis: Wenn Sie neben ASCII auch mit Unicode-Zeichen arbeiten, prüfen Sie, ob Ihre Regex-Engine diese ordnungsgemäß unterstützt.

mgibsonbr
quelle
Brillant! Funktioniert für: perl -pe / ^ utf-8 \? B \ ?. * $ // gi 'Cancer.1631, übereinstimmende / ersetzende Zeichenfolge "UTF-8? B?" in der Datei Cancer.1631. Dies schlägt fehl: perl-pes / ^ utf-8 \? B \ ?. * $ // g 'Cancer.1631, aufgrund der Nichtübereinstimmung des Falls.
Victoria Stuart
Dieser Beitrag wäre viel klarer, wenn es nicht so ein konkretes Beispiel wäre. Zum Beispiel, wenn Sie die Groß- und Kleinschreibung für ein anderes Wort wie ".txt" und ".TXT" ignorieren möchten. Wenn ich mir diese Antwort ansehe, bin ich mir immer noch nicht sicher, wie ich das machen könnte.
Kyle Bridenstine
Aus irgendeinem Grund funktioniert der von Ihnen veröffentlichte Regex nicht in einem finderweiterten Regex. Beispielsweise werden find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)keine Ordner angezeigt. Weiß Ein ähnliches Register find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)ohne die Modifikatoren zeigt die richtigen Ordner an. Irgendeine Idee warum?
Alpha_989
Hier versuche ich, alle Ordner zu finden, die nur mit Zeichen [a-c]im aktuellen Ordner beginnen .
Um
Ehrlich gesagt würde ich Option 2 in den Hauptteil der Antwort aufnehmen, da es generisch ist und mit allen Regex-Engines funktioniert.
Puterdo Borato
153

Hängt von der Implementierung ab, aber ich würde verwenden

(?i)G[a-b].

VARIATIONEN:

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

Mit modernen Regex-Aromen können Sie Modifikatoren nur auf einen Teil des regulären Ausdrucks anwenden. Wenn Sie den Modifikator (? Im) in die Mitte des regulären Ausdrucks einfügen, gilt der Modifikator nur für den Teil des regulären Ausdrucks rechts vom Modifikator. Mit diesen Varianten können Sie Modi ausschalten, indem Sie ihnen ein Minuszeichen (? -I) voranstellen.

Die Beschreibung stammt von der Seite: https://www.regular-expressions.info/modifiers.html

Elrado
quelle
Dies ist das Modifikatorformat für die Regex-Suchmaschine von TortoiseHg.
mwolfe02
Können Sie mir sagen, wie dies in der Linux-Shell (z. B. in egrep ohne Verwendung des Schalters "-i") generisch erreicht werden kann?
Krishna Gupta
1
(?i)Es (?-i)wäre wirklich hilfreich gewesen zu erklären, was das macht und wie man es beendet ( ). Das ist zweifellos der Grund, warum Ihre Antwort 1/3 so viele Stimmen hat wie die Frage Nr. 1 statt fast so viele, wie sie dieses subtile Detail erklären.
Gabriel Staples
55

regulärer Ausdruck für die Validierung von 'abc' ohne Berücksichtigung der Groß- und Kleinschreibung

(?i)(abc)
Ravinath
quelle
1
Funktioniert perfekt mit Android Studio Logcat
Joe
Funktioniert auch in Python
conner.xyz
47

Das iFlag wird normalerweise für die Groß- und Kleinschreibung verwendet. Sie geben hier keine Sprache an, aber es wird wahrscheinlich so etwas wie /G[ab].*/ioder sein /(?i)G[ab].*/.

Chooban
quelle
15

Der Vollständigkeit halber wollte ich die Lösung für reguläre Ausdrücke in C ++ mit Unicode hinzufügen:

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

if (std::tr1::regex_match(szString, pattern))
{
...
}
Frankenstein
quelle
1
Kann mir jemand erklären, warum dieser Beitrag abgelehnt wurde? Die akzeptierte Lösung verwendet spezifischen Code und der Vollständigkeit halber wollte ich die Lösung für die Standardbibliotheken der Sprache c ++ hinzufügen. Meiner Meinung nach habe ich einen Mehrwert für eine allgemeinere Frage geschaffen.
Frankenstein
5

Wie ich aus diesem ähnlichen Beitrag ( Ignorierfall in AWK ) herausgefunden habe, müssen Sie möglicherweise auf alten Versionen von awk (wie z. B. unter Vanilla Mac OS X) verwenden 'tolower($0) ~ /pattern/'.

IGNORECASEoder (?i)oder /pattern/igeneriert entweder einen Fehler oder gibt für jede Zeile true zurück.

senortim
quelle
2

C #

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

Insbesondere : Optionen: RegexOptions.IgnoreCase

DonkeyKong
quelle
1

[gG] [aAbB]. * simuliert wahrscheinlich eine Lösung, wenn das Muster nicht zu kompliziert oder lang ist.

alpha_989
quelle
würde gerne wissen, warum diese Antwort für die gegebene Frage falsch ist?
Alpha_989
Sie haben es in Ihrer Antwort "ist nicht zu kompliziert oder lang"
Reggaeguitar
Dies ist tatsächlich die einzige Lösung, die für meinen Fall funktioniert hat. Es sieht auch nach der allgemeinsten Lösung aus, die überall funktionieren sollte. Alle anderen Antworten scheinen für bestimmte Regex-Implementierungen sehr spezifisch zu sein.
Puterdo Borato
1

Ergänzung zu den bereits akzeptierten Antworten:

Grep Verwendung:

Beachten Sie, dass grepes sich lediglich um das Hinzufügen des -iModifikators handelt. Beispiel: grep -rni regular_expressionUm rekursiv nach diesem 'regulären_Ausdruck' zu suchen, muss der Fall 'i'unempfindlich sein und die Zeile' n'Zahlen im Ergebnis anzeigen.

Hier ist auch ein großartiges Tool zum Überprüfen regulärer Ausdrücke: https://regex101.com/

Beispiel: Siehe den Ausdruck und die Erklärung in diesem Bild.

Geben Sie hier die Bildbeschreibung ein

Verweise:

Gabriel Staples
quelle
0

In Java hat der RegexKonstruktor

Regex(String pattern, RegexOption option)

Verwenden Sie also, um Fälle zu ignorieren

option = RegexOption.IGNORE_CASE
Aziz
quelle
0

Sie können Regex in Visual Studio und Visual Studio Code mit Suchen / Ersetzen üben.

Sie müssen sowohl Groß- / Kleinschreibung als auch reguläre Ausdrücke für Regex-Ausdrücke mit Groß- und Kleinschreibung auswählen. Andernfalls funktioniert [AZ] nicht. Geben Sie hier die Bildbeschreibung ein

Visual Studio 2019-Community

David Morrow
quelle
-2

Sie können auch Ihre anfängliche Zeichenfolge, die Sie auf Musterübereinstimmung prüfen, in Kleinbuchstaben führen. Und verwenden Sie in Ihrem Muster jeweils Kleinbuchstaben.

Alexander Drobyshevsky
quelle