2013-05-04 11 views
10

Próbuję sprawdzić, czy mój ciąg pasuje do wzorca. Oznacza to, że cały ciąg może być zapisany jako ten wzór. Jednak preg_match zwraca , jeśli dowolny podciąg pasuje do tego wzorca. (Np preg_match("#[a-z]*#, "333k") zwraca 1, czego nie chcesz. W tym przykładzie wolałbym zweryfikowania, cały ciąg zawiera tylko małe litery alfabetu łacińskiego.)PHP preg_match pełny ciąg

Odpowiedz

13

użyć rozpoczęciai koniec markery , ^ i $, odpowiednio, aby wskazać początek i koniec ciągu w twoim wzorze regularnego wyrażenia. W ten sposób możesz dopasować wyrażenie tylko do całego łańcucha, a nie do dowolnego podciągu. W twoim przypadku to wtedy wyglądać następująco:

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

Można również, przy czym jeden tych markerów, należy określić, że wzorzec musi odpowiadać tylko początek lub koniec łańcucha.

+0

Ahhh, dzięki za superszybką pomoc, działa teraz. – user2089648

1

Uwaga: aby zakotwiczyć dopasowanie ciągów na początku i końcu ciągu, można również rozważyć użycie kotwic \A i \z.

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

\A i \zjednoznaczne początek i koniec kotew strunowych w PHP regex (jak ich zachowanie nie zależy od jakichkolwiek regex modyfikatorów, nawet jeśli podasz modyfikator m MULTILINE, będą dalej twierdząc, pozycje początkowe/końcowe ciągów). Zobacz więcej na temat kotew regex PHP w PHP documentation.

Strzeż \Z choć: \Z będzie dopasować cały ciąg przed ostatnim pojedynczym LINEBREAK, natomiast \z będzie pasował tylko na samym końcu łańcucha, czyli po wszystkich znaków występują w łańcuchu (patrz Whats the difference between \z and \Z in a regular expression and when and how do I use it?)