Notatnik Webmastera : Reg Exp ...



Obserwuj zmiany wprowadzane na tej stronie | Wersja do druku | Zaloguj się:   Hasło:  
Wyrażenia regularne. W PHP obsługiwane przez funkcje preg_..

Wyrażenie poniżej pasuje do wszystkich wystąpień słowa nazwa lub opis wewnątrz $subject znajdujących się na zewnątrz apostrofów.

Czyli np. dla $subject = "to jest cośtopisam nazwa ale nie 'inna nazwa jone\'s nazwa inna' fad asd 'nazwa nazwa' sadopisas nazwa asdasd" znajduje pogrubione wystąpienia ciągu nazwa.

Ciekawa sprawa z powtórzeniami i negative lookahead (być może również positive)

powiedzmy że mamy tekst:
wwwwkoza

i próbujemy go przypasować do:
w*(?!koza)

Można by się spodziewać, że wynikiem dopasowania będzie www
Otóż okazuje się nim być w
Czemu tak ?
Skąd ta nagła utrata zachłanności gwiazdki ?
Czemu akurat jeden znak a nie pusty ciąg?
Nie wiem.

Moje zaskoczenie było jeszcze większe bo oczekiwałem, że tekst nie będzie pasować do wzorca bo gwiazdka przywłaszczy sobie wszystkie w a potem stwierdzi, że po nich jest niestety słowo koza i zakończy się porażką.

Żeby osiągnąć taki efekt można lekko zmodyfikować regexp:
(?>w*)(?!koza)
Jest to tak zwane once only, które powoduje, że gwiazdka zachowuje się tak jak chciałem.

Once only powoduje, że powtórzenie zagarnia zawsze maksymalną ilość jaką tylko może bez oglądania się na to czy to co jest po tych znakach pasuje do reszty wzorca. Np. (?>.*)koza zagarnia zawsze cały tekst do samego końca, a potem sprawdza czy po nim jest jeszcze koza, oczywiście nie ma bo została już zjedzona przez gwiazdkę. Zwykły wzorzec .*koza natomiast wyłapie kozę.

 
Nie ma plików na tej stronie. [Wyświetl pliki/formularz]
Komentarze (0). [Dodaj/Wyświetl komentarze]

Informacje zanotowane na tej stronie sa publicznie dostępne. Każdy kto ma ochote może je wykorzystaż w dowolnym celu. Notujac tu coś godzisz sie z tym faktem.

Jeżeli widzisz na tej stronie treść lub kod Twojego autorstwa, na których upublicznianie przeze mnie sie nie godzisz daj mi znać.

Jeżeli uważasz informacje zamieszczone na tej stronie za użyteczne umieść linka do tej strony na własnych stronach. Dzięki temu większa ilość ludzi będzie mogła na tą stronę trafić.

Internetowy katalog stron internetowych