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].*
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:
Verwenden Sie die Modifikatoren (?i)
und [optional] (?-i)
:
(?i)G[a-b](?-i).*
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.
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
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
.
regulärer Ausdruck zum Überprüfen von 'abc', wobei Groß- und Kleinschreibung ignoriert wird
(?i)(abc)
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))
{
...
}
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.
[gG] [aAbB]. * vereinfacht wahrscheinlich die Lösung, wenn das Muster nicht zu kompliziert oder lang ist.
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:
Beachten Sie, dass es sich bei grep
ing 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.
man grep
) C #
using System.Text.RegularExpressions;
...
Regex.Match(
input: "Check This String",
pattern: "Regex Pattern",
options: RegexOptions.IgnoreCase)
speziell: Optionen: RegexOptions.IgnoreCase