Wyrażenia regularne
Obserwacja:
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:
- Wikipedia https://pl.wikipedia.org/wiki/Wyrażenie_regularne
- Fajny systemy on-line do zabaw: https://regex101.com https://regexr.com https://www.regextester.com
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';