Ich möchte einem ganzen Wort einen regulären Ausdruck zuordnen.
Im folgende Beispiel versuche ich zu passen s
oder season
aber , was ich Streichhölzer s
, e
, a
, o
und n
.
[s|season]
Wie mache ich einen regulären Ausdruck, der zu einem ganzen Wort passt?
regex
expression
word
NMGod
quelle
quelle
(season|s)
stattdessen.[season]
entspricht einems
,e
,a
,o
,n
.Antworten:
Eckige Klammern sind für die Zeichenklasse gemeint, und Sie versuchen , tatsächlich irgendeine der zum Spiel:
s
,|
,s
(wieder),e
,a
,s
(wieder),o
undn
.Verwenden Sie stattdessen Klammern für die Gruppierung:
oder nicht erfassende Gruppe:
Hinweis: Nicht erfasste Gruppen teilen der Engine mit, dass die Übereinstimmung nicht gespeichert werden muss, während die andere (Erfassungsgruppe). Bei kleinen Dingen, die entweder funktionieren, bei schweren Sachen möchten Sie vielleicht zuerst sehen, ob Sie das Match brauchen oder nicht. Wenn Sie dies nicht tun, verwenden Sie besser die Nicht-Erfassungsgruppe, um mehr Speicher für die Berechnung zuzuweisen, anstatt etwas zu speichern, das Sie niemals verwenden müssen.
quelle
?:
Innere einer Gruppierung, auch bekannt als,non-capturing
sagt, dass Sie die übereinstimmenden Ausdrücke nicht verwenden können$1
,$2
und so weiter ... Wenn Sie möchten, dass ein Ausdruck nicht übereinstimmt, benötigen Sie Folgendes^
.(?! ... )
Elemente übereinstimmen möchten, verwenden Sie insead, dh(?!s|season)
in diesem Fall.Verwenden Sie dieses Live-Online-Beispiel, um Ihr Muster zu testen:
Der obige Screenshot stammt aus diesem Live-Beispiel: https://regex101.com/r/cU5lC2/1
Übereinstimmung mit einem ganzen Wort in der Befehlszeile.
Ich werde die interaktive phpsh-Shell unter Ubuntu 12.10 verwenden , um die PCRE-Regex-Engine mit der als preg_match bekannten Methode zu demonstrieren
Starten Sie phpsh, fügen Sie Inhalte in eine Variable ein und stimmen Sie mit dem Wort überein.
Die preg_match Methode verwendet , um den PCRE Motor innerhalb der Sprache PHP Variablen zu analysieren
$content1
,$content2
und$content3
mit dem(\w)+
Muster.$ content1 und $ content2 enthalten mindestens ein Wort, $ content3 nicht.
Ordnen Sie ein bestimmtes Wort in der Befehlszeile ohne Wortbountaries zu
Variablen
gun1
undgun2
enthalten die Zeichenfolgedart
oderfart
die korrekt ist, aber gun3 enthältdarty
und stimmt immer noch überein, das ist das Problem. Also weiter zum nächsten Beispiel.Ordnen Sie bestimmte Wörter in der Befehlszeile den Wortgrenzen zu:
Wortgrenzen können erzwungen werden
\b
, siehe:Regex Visual Image von http://jex.im/regulex und https://github.com/JexCheng/regulex Beispiel:
Es wird
\b
behauptet, dass wir eine Wortgrenze haben, um sicherzustellen, dass "Dart" übereinstimmt, "Darty" jedoch nicht.quelle
Ich teste Beispiele in js. Einfachste Lösung - fügen Sie einfach das benötigte Wort in / / hinzu:
Nun, wenn Sie dieses spezifische Wort mit Grenzen brauchen, nicht in anderen Zeichen-Buchstaben. Wir verwenden b Marker:
Wir haben auch die Methode exec () in js, die das Objektergebnis zurückgibt. Es hilft fg, Informationen über Ort / Index unseres Wortes zu erhalten.
Wenn wir alle übereinstimmenden Wörter in Zeichenfolge / Satz / Text erhalten möchten, können wir den Modifikator g (globale Übereinstimmung) verwenden:
Nun das letzte - ich brauche nicht ein bestimmtes Wort, aber einige von ihnen. Wir verwenden | Zeichen, es bedeutet Wahl / oder.
quelle
[ ]
definiert eine Zeichenklasse. Also wird jeder Charakter, den Sie dort setzen, übereinstimmen.[012]
wird übereinstimmen0
oder1
oder2
und[0-2]
verhält sich gleich.Was Sie wollen, sind Gruppierungen, um eine or-Anweisung zu definieren. Verwenden Sie
(s|season)
für Ihr Problem.Übrigens. du musst aufpassen. Metazeichen in normaler Regex (oder innerhalb einer Gruppierung) unterscheiden sich von der Zeichenklasse. Eine Zeichenklasse ist wie eine Subsprache.
[$A]
wird nur passen$
oderA
sonst nichts. Kein Entkommen hier für den Dollar.quelle