2013-05-04 24 views
10

Ich versuche zu überprüfen, dass meine Zeichenfolge ein Muster entspricht. Das heißt, die vollständige Zeichenfolge kann als dieses Muster geschrieben werden. preg_match gibt jedoch true zurück, wenn eine Teilzeichenfolge mit diesem Muster übereinstimmt. (zB preg_match("#[a-z]*#, "333k") kehrt 1, die ich will nicht. In diesem Beispiel würde ich eher überprüfen, die gesamte Zeichenfolge enthält nur kleine lateinische Buchstaben.)PHP preg_match vollständige Zeichenfolge

Antwort

13

Sie verwenden den Start und Ende Marker , ^ und $, um den Anfang und das Ende der Zeichenfolge in Ihrem regulären Ausdrucksmuster anzugeben. Auf diese Weise können Sie sicherstellen, dass der Ausdruck nur mit der gesamten Zeichenfolge und nicht mit einer Teilzeichenfolge übereinstimmt. In Ihrem Fall wäre es dann wie folgt aussehen:

preg_match("#^[a-z]*$#", "333k"); 

Sie können auch mit einem dieser Marker an, dass das Muster nur den Anfang oder das Ende der Zeichenfolge übereinstimmen muss.

+0

Ahhh, danke für die super schnelle Hilfe, funktioniert jetzt. – user2089648

1

Beachten Sie, dass zur Verankerung der Zeichenfolgenübereinstimmung am Anfang und Ende der Zeichenfolge auch die Verwendung der Anker \A und \z in Betracht gezogen werden kann.

preg_match('~\A[a-z]*\z~', "333k"); 
      ^^  ^^ 

Die \A und \z sind eindeutig Anfang und Ende der Zeichenfolge Anker in PHP Regex (wie ihr Verhalten nicht auf irgendwelchen regex Modifikatoren abhängt, auch wenn Sie den m MULTI Schlüssel angeben, werden sie behalten behaupten Anfangs-/Endpositionen des Strings). Weitere Informationen zu PHP-Regex-Ankern finden Sie unter PHP documentation.

Vorsicht vor \Z aber: \Z wird die gesamte Zeichenfolge vor dem letzten Einzelzeilenumbrüche übereinstimmen, während \z nur am Ende der Schnur übereinstimmen, das heißt, nachdem alle Zeichen dort in der Zeichenfolge (siehe Whats the difference between \z and \Z in a regular expression and when and how do I use it?)