piątek, 4 stycznia 2008

przewidywanie w RegExp PHP

W "Uniwersalnym Słowniu Języka Polskiego" znalazłem hasła związane z przewidywaniem:



  • przewidujący liczący się z następstwami, myślący o przyszłości

  • przewidywanie to, co ktoś przewiduje, przypuszcza, czego się spodziewa, domyśla

  • przewidzieć — przewidywać
    1. przeczuć, domyślić się co będzie, co może nastąpić
    2. określić, oznaczyć coś z góry




Łącząc te definicje z zadaniami wyrażeń regularnych które w specjalny sposób opisują szukany tekst (lub szerzej części pól) otrzymamy dopasowywanie lub opisanie wyrażenia w zależności od kolejnych, przyszłych znaków.



    Operatory przewidywań
  • (?=...) pozytywne przewidywanie

  • (?=!...) negatywne przewidywanie

  • (?=<...) pozytywne przewidywanie wsteczne

  • (?=<!...) negatywne przewidywanie wsteczne



Operatory przewidywań nie powodują pochłaniania fragmentu napisów.


Przykład:
wyrażenie http(s)?://(www.)?(?!letnik.pl)
sprawdzi czy w napisie są linki do innych domen niż letnik.pl
dodając małą modyfikację można sprawdzenie poszerzyć o subdomeny:
http(s)?://(www.)?(?![a-z.]*?letnik.pl)
W ten sposób za pomocą pętli można dokonać sprawdzenia np przesyłanych danych $_POST pod kątem występowania linków zewnętrznych, policzenia ich itd...