wake-up-neo.net

Regulärer Ausdruck, der mit einem Wort oder seinem Präfix übereinstimmt

Ich möchte einem regulären Ausdruck ein ganzes Wort zuordnen.

Im folgenden Beispiel versuche ich, s oder season zu finden, aber was ich habe, stimmt mit s, e, a, o und n überein.

[s|season]

Wie erstelle ich einen regulären Ausdruck, der einem ganzen Wort entspricht?

103
NMGod

Eckige Klammern sind für die Zeichenklasse gedacht, und Sie versuchen tatsächlich, eine der folgenden Angaben zu machen: s, |, s (erneut), e, a, s (erneut), o und n .

Verwenden Sie stattdessen Klammern für die Gruppierung:

(s|season)

oder nicht erfassende Gruppe:

(?:s|season)

Hinweis: Nicht-Erfassungsgruppen teilen der Suchmaschine mit, dass die Übereinstimmung nicht gespeichert werden muss, während die andere (Erfassungsgruppe) dies tut. Bei kleinen Dingen funktioniert entweder, bei schweren Dingen möchten Sie vielleicht zuerst sehen, ob Sie das Streichholz brauchen oder nicht. Wenn dies nicht der Fall ist, verwenden Sie die Gruppe ohne Erfassung besser, um mehr Speicher für die Berechnung zuzuweisen, anstatt etwas zu speichern, das Sie niemals benötigen werden.

123
Jerry

Verwenden Sie dieses Live-Online-Beispiel, um Ihr Muster zu testen:

enter image description here

Obiger Screenshot aus diesem Live-Beispiel: https://regex101.com/r/cU5lC2/1

Entspricht einem beliebigen Wort in der Befehlszeile.

Ich werde die phpsh Interactive Shell auf Ubuntu 12.10 verwenden, um dies zu demonstrieren die PCRE-Regex-Engine durch die als preg_match bekannte Methode

Starten Sie phpsh, fügen Sie Inhalte in eine Variable ein und passen Sie sie an Word an.

[email protected]:~/foo$ phpsh

php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'

php> echo preg_match('(\w+)', $content1);
1

php> echo preg_match('(\w+)', $content2);
1

php> echo preg_match('(\w+)', $content3);
0

Die preg_match-Methode verwendete die PCRE-Engine in der Sprache PHP=), um Variablen zu analysieren: $content1, $content2 Und $content3 Mit dem (\w)+ Muster.

$ content1 und $ content2 enthalten mindestens ein Wort, $ content3 nicht.

Übereinstimmungen mit bestimmten Wörtern in der Befehlszeile ohne Wortbegrenzungen

[email protected]:~/foo$ phpsh

php> $gun1 = 'Dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'Unicorn gun';

php> echo preg_match('(Dart|fart)', $gun1);
1

php> echo preg_match('(Dart|fart)', $gun2);
1

php> echo preg_match('(Dart|fart)', $gun3);
1

php> echo preg_match('(Dart|fart)', $gun4);
0

Die Variablen gun1 Und gun2 Enthalten die Zeichenfolge Dart oder fart, die korrekt ist, aber gun3 enthält darty und stimmt trotzdem überein Problem. Also weiter zum nächsten Beispiel.

Ordnen Sie bestimmte Wörter in der Befehlszeile den Wortgrenzen zu:

Wortgrenzen können mit \b Erzwungen werden, siehe: Visual analysis of what wordboundary is doing from jex.im/regulex

Regex Visual Image erworben von http://jex.im/regulex und https://github.com/ JexCheng/regulex Beispiel:

[email protected]:~/foo$ phpsh

php> $gun1 = 'Dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'darty gun';
php> $gun4 = 'Unicorn gun';

php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0

php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0

Der \b Gibt an, dass wir eine Wortgrenze haben, wodurch sichergestellt wird, dass "Dart" übereinstimmt, "Darty" jedoch nicht.

112
Eric Leschinski

Ich teste Beispiele in js. Einfachste Lösung - fügen Sie einfach das Wort hinzu, das Sie benötigen//:

var reg = /cat/;
reg.test('some cat here');//1 test
true // result
reg.test('acatb');//2 test
true // result

Nun, wenn du dieses spezielle Wort mit Grenzen brauchst, nicht in anderen Zeichenbuchstaben. Wir benutzen b marker:

var reg = /\bcat\b/
reg.test('acatb');//1 test 
false // result
reg.test('have cat here');//2 test
true // result

Wir haben auch die Methode exec () in js, die object-result zurückgibt. Es hilft z. um Informationen über Ort/Index unseres Wortes zu erhalten.

var matchResult = /\bcat\b/.exec("good cat good");
console.log(matchResult.index); // 5

Wenn wir alle übereinstimmenden Wörter in Zeichenfolge/Satz/Text benötigen, können wir den Modifikator g verwenden (globale Übereinstimmung):

"cat good cat good cat".match(/\bcat\b/g).length
// 3 

Jetzt das letzte - ich brauche nicht 1 spezifisches Wort, aber einige von ihnen. Wir verwenden | Zeichen, bedeutet es Wahl/oder.

"bad dog bad".match(/\bcat|dog\b/g).length
// 1
3
Vasyl Gutnyk

[ ] definiert eine Zeichenklasse. So wird jedes Zeichen, das Sie dort einstellen, übereinstimmen. [012] wird passen 0 oder 1 oder 2 und [0-2] verhält sich genauso.

Sie möchten, dass Gruppierungen eine or-Anweisung definieren. Verwenden (s|season) für Ihr Problem.

Btw. du musst aufpassen. Metazeichen in normaler Regex (oder innerhalb einer Gruppierung) unterscheiden sich von der Zeichenklasse. Eine Zeichenklasse ist wie eine Untersprache. [$A] passt nur zu $ oder A, sonst nichts. Kein Entkommen hier für den Dollar.