20 grudnia 2017 (środa), 10:44:44

Wyrażenia regularne

Obserwacja:

Raz na rok przychodzi taki dzień, że przypominam sobie Wyrażenia Regularna i nawet próbuję )z większym lub mniejszym sukcesem) je użyć przy rozwiązaniu jakiegoś problemu.

Czy dziś jest ten dzień?

Daty:

  • listopad 2005 -  wtedy robiłem parser do notek w blogu (jest notka)
  • co najmniej 5 albo i 10 takich dni, ale daty trudno określić
  • 20 grudnia 2017, w coworku BussnesLink na Chorzowskiej, pracuję nad blogiem W34

Lista:

. - dowolny znak

\ - znak po backslash jest traktowany normalnie, a więc \. to kropka a nie dowolny znak

[abc] - oznacza znak z tego zestawu

[0-9] - oznacza znak z zakresu znaków

[a-zA-Z] - oznacza małą lub dużą literę

[^abc] - oznacza dowolny znak z poza tego zestawu

( ) - grupowanie symboli w jakimś celu

* - zero lub więcej wystąpień poprzedzającego znaku

? - zero lub jedno wystąpienie poprzedzającego znaku

+ - jedno wystąpienie poprzedzającego znaku

^ - początek wiersza

$ - koniec wiersza

| - alternatywa, oznacza, że może wystąpić znak z lewej lub z prawej strony

 Przykłady:

\([0-9][0-9]*\) - wyszukuje numery wersetów

$regex = '/(class)(\s*)=(\s*)(["\'])([^"\']*)'.$class.'([^"\']*)\4/i'; - tworzy w PHP regexpa do wyszukania klasy (fraza class=) w kodzie HTML,Kuba używa tego w blogu.

Wiedza:


Kategorie: programowanie, _blog


Słowa kluczowe: wyrażenia regularne


Komentarze: (1)

wojtek, August 9, 2021 09:01 Skomentuj komentarz


Dziś jest ten dzień, w którym raz na 7 lat programista musi przypomnieć sobie wyrażenia regularne.
!!!! Uwaga - zapomniałem dodać, że muszę sprawdzić poprawność daty wpisanej z palca, a więc często wpisanej źle. Ale spoko - jeszcze 4 godzinki i dam radę.


if (preg_match("'^20[1-2][0-9]-[0-1][0-9]-[0-3][0-9], dziś'", $message->subject)) {
echo $message->subject." "."==TAK===\n";
} else {
echo $message->subject." "."===NIE==\n";
}


A potem była walka, bo coś to nie działa dla UTF-8

// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]+).([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]+).*$/u';
// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s(\w+).([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]+).*$/u';
// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([a-zA-ZęółśążźćńĘÓŁŚĄŻŹĆŃ]+).([a-zA-ZęółśążźćńĘÓŁŚĄŻŹĆŃ]+).*$/u';
// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]{5,13}).([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]+).*$/u';
/// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([[:alpha:]]+}).([[:alpha:]]+).*$/u';
/// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]{5,13}).([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]+).*$/ismU';
/// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]{5,13}).([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]+).*$/is';
// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([\p{L}]+).([\p{L}]+).*$/isu';
// $pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([\p{L}]+).([\p{L}]+).*$/u';
$pp = '/^(\d{4})-(\d{2})-(\d{2}),?\s([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]+).([a-zA-Zążśźęćń󳥯ŚŹĘĆŃÓŁ]+).*$/u';

Skomentuj notkę

Disclaimers :-) bo w stopce coś wyglądającego mądrze można napisać. Wszystkie powyższe notatki są moim © wymysłem i jako takie związane są ze mną. Ale są też materiały obce, które tu przechowuję lub cytuje ze względu na ich dobrą jakość, na inspiracje, bądź ilustracje prezentowanego lub omawianego tematu. Jeżeli coś narusza czyjeś prawa - proszę o sygnał abym mógł czym prędzej naprawić błąd i naruszeń zaniechać.