it-swarm.com.de

Regex: Groß- und Kleinschreibung ignorieren

Wie kann ich den folgenden Regex dazu bringen, die Groß- und Kleinschreibung zu ignorieren? Es sollte mit allen richtigen Zeichen übereinstimmen, aber ignorieren, ob es sich um Klein- oder Großbuchstaben handelt.

G[a-b].*
203
brother

Angenommen, Sie möchten, dass der whole regex-Fall ignoriert, sollten Sie nach dem Flag i suchen. Fast alle Regex-Engines unterstützen es:

/G[a-b].*/i

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

Lesen Sie in der Dokumentation Ihrer Sprache/Plattform/Ihres Tools nach, wie die Übereinstimmungsmodi festgelegt werden.

Wenn nur part des Regex die Groß- und Kleinschreibung berücksichtigen soll (wie meine ursprüngliche Antwort vorausgesetzt), 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 (d. H. Klein- und Großbuchstaben) in den regulären Ausdruck ein.

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

Noch ein letzter Hinweis: Wenn Sie neben ASCII auch Unicode-Zeichen verwenden, prüfen Sie, ob Ihre Regex-Engine diese richtig unterstützt.

296
mgibsonbr

Kommt auf die Implementierung an, aber ich würde verwenden

(?i)G[a-b].

VARIATIONS: 

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

Moderne reguläre Ausdrücke ermöglichen es, Modifikatoren nur auf einen Teil des regulären Ausdrucks anzuwenden. Wenn Sie den Modifikator (? Im) in die Mitte des Regex einfügen, gilt der Modifikator nur für den Teil des Regex, der sich rechts vom Modifikator befindet. 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

97
elrado

Das Flag i wird normalerweise für die Groß- und Kleinschreibung verwendet. Sie geben hier keine Sprache an, aber es ist wahrscheinlich etwas wie /G[a-b].*/i.

45
chooban

regulärer Ausdruck zum Überprüfen von 'abc', wobei Groß- und Kleinschreibung ignoriert wird 

(?i)(abc)
40
Ravinath

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

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

IGNORECASE oder (?i) oder /pattern/i generiert entweder einen Fehler oder gibt für jede Zeile den Wert true zurück.

3
senortim

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

1
alpha_989

Sie können auch die Anfangszeichenfolge, die Sie auf Musterübereinstimmung überprüfen, in Kleinbuchstaben führen. Und verwenden Sie in Ihrem Muster jeweils Kleinbuchstaben.

Ergänzung zu den bereits akzeptierten Antworten:

Grep-Nutzung:

Beachten Sie, dass es sich bei greping einfach um das Hinzufügen des Moduls -i handelt. Beispiel: grep -rni regular_expression, um nach diesem 'regular_expression' zu suchen, dh, es handelt sich um 'empfindlich', wobei 'n' Zahlen im Ergebnis angezeigt werden.

Hier ist auch ein hervorragendes Werkzeug zum Überprüfen regulärer Ausdrücke: https://regex101.com/

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

 enter image description here

Verweise:

0
Gabriel Staples

C #

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

speziell: Optionen: RegexOptions.IgnoreCase

0
DonkeyKong