2009-06-02 7 views
44

Chcę wiedzieć, co oznacza operator tyldy w wyrażeniach regularnych.Operator tyldy w wyrażeniach regularnych

mam to oświadczenie:

if (!preg_match('~^\d{10}$~', $_POST['isbn'])) { 
    $warnings[] = 'ISBN should be 10 digits'; 
} 

znalazłem ten dokument wyjaśniający, co tylda oznacza: ~

Mówi się, że =~ jest operatorem Perl że środki uruchomić tę zmienną przeciwko tego wyrażenia regularnego.

Ale dlaczego moje wyrażenie regularne zawiera dwa operatory tyldy?

Odpowiedz

52

W tym przypadku jest używany tylko jako ogranicznik.

Ogólnie rzecz biorąc, w PHP pierwsza i ostatnia litera wyrażenia regularnego to "ograniczniki" oznaczające pozycję początkową i końcową pasującego fragmentu (w przypadku, gdy chcesz dodać modyfikatory na końcu, np. Ungreedy itp.)

Generalnie PHP wykonuje to z pierwszego znaku w ciągu znaków, który jest rozumiany jako wyrażenie regularne, dopasowując drugie wystąpienie jako drugi separator. Jest to przydatne, gdy występuje w tekście wystąpienie normalnego separatora (na przykład pojawienie się w tekście /) - oznacza to, że nie musisz robić niezręcznych rzeczy.

Matching dla "//" z separatora ustawiony na "/"

/\/\//

Matching dla "//" z ogranicznikiem o "#"

#//#

+1

ic, jestem przyzwyczajony do/delimiter, więc byłem trochę zmieszany z delimiterem. Dzięki za wytłumaczenie. –

+0

Dotyczy to tylko PCRE http://docs.php.net/manual/en/book.pcre.php, a nie POSIX ERE http://docs.php.net/manual/en/book.regex.php – Gumbo

6

W tym przypadku to nic nie znaczy. Po prostu ogranicza początek i koniec twojego wzorca. W PCRE (pcre), który jest co używasz z preg_ * w PHP, wzór jest wejście wzdłuż boku możliwości ekspresji, tak jak poniżej:

preg_match("/pattern/opt", ...); 

Jednak użycie „/” ponieważ separator w tym przypadku jest arbitralny - chociaż ukośnik naprzód jest popularny, można go zastąpić cokolwiek. W twoim przypadku jest to tylda.

+0

Och, Ok .. Mam normalny wyraz z książki ... Nie wyjaśnili, co to znaczy. Był trochę zmieszany. Próbowałem tylko wyjaśnić, ponieważ jestem zdezorientowany. Dzięki! –

+0

'/' jest popularny, ponieważ jest standardowym ogranicznikiem dla wyrażeń regularnych Perla, co oznacza preg;) –