preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);
Ergebnis zu finden, ist AA
, aber ich brauche AA
und BB
.PHP: preg_match regex nicht korrekt Strings
preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);
Ergebnis zu finden, ist AA
, aber ich brauche AA
und BB
.PHP: preg_match regex nicht korrekt Strings
Die [\s]{1}
Sequenzen * Sie verwenden zwischen den Spielen Leerzeichen Überlappung zu entsprechen. Der nachgestellte Abstand nach "AA "
ist derselbe wie der vor " BB"
. Jedes Zeichen kann nur einmal abgeglichen werden, so dass nach der Suche " AA "
nur die verbleibende Zeichenfolge "BB "
nach einer Übereinstimmung gesucht wird und keine gefunden wird.
Versuchen Sie stattdessen die Wortgrenzen-Escape-Sequenz \b
. Dies entspricht den Anfang und das Ende von Wörtern, verbrauchen aber nicht wirklich alle Zeichen, so kann es mehrere Male entsprechen:
preg_match_all('/\b(AA|BB|CC)+\b/', 'AA BB', $matches);
Mit \b
hat den Bonus Wirkung nicht erfordert, um die zusätzlichen Leerzeichen Sie Ihre Schnur hatte umgibt. Sie können einfach 'AA BB'
statt ' AA BB '
übergeben, wenn Sie es wünschen.
* By the way, ist [\s]{1}
dasselbe wie [\s]
, die die gleiche wie eine einfache \s
ist. Keine Notwendigkeit für die eckigen oder geschweiften Klammern.
Das Problem ist, dass Sie versuchen, das gleiche Leerzeichen zweimal zu vergleichen. Mit einem Blick in die Zukunft (? = \ S) sollten helfen:
preg_match_all('/\s(AA|BB|CC)(?=\s)/',' AA BB CC BB AA ',$matches);
Sie können einen positiven Blick hinter tun:
/(?<=\s)(AA|BB|CC)+\s/
Ressourcen:
eine Wortgrenze wird auch Übereinstimmung (z.B.) "AA; BB; CC", was falsch positive sein könnte. – Matthew