Cześć,
mam problem ze znakiem klamry w wyrażeniu regularnym na PHP7.
{osoba:imie.nazwisko}
REGEXP:
/{osoba:[(a-z)]+}/i
Po usunięciu klamerek, znajduje, a z nimi nie. Wcześniej na PHP 5.6 działało bez problemu.
co17rey napisał(a):
{osoba:imie.nazwisko}
REGEXP:
/{osoba\:[(a-z)]+}/i
Ja tu raczej widzę problem, że dopasowujesz osoba:
, a potem ciąg znaków z grupy a-z()
, więc format imie.nazwisko
się w to nie wpasowuje, bo zawiera kropkę, która nie zawiera się w grupie a-z()
.
Klamry służą do podawania liczby powtórzeń poprzedzającego je wyrażenia, np:
a{5}
- pięć literek a
więc jeśli chcesz je potraktować jako zwykłe znaki, to musisz je eskejpnąć:
/\{osoba\:[(a-z)]+\}/i
Freja Draco napisał(a):
Klamry służą do podawania liczby powtórzeń poprzedzającego je wyrażenia, np:
a{5}
- pięć litereka
więc jeśli chcesz je potraktować jako zwykłe znaki, to musisz je eskejpnąć:
/\{osoba\:[(a-z)]+\}/i
Zgadza się. Warto zaznaczyć, że klamry odpowiadają za zakres albo są klamrami zależnie od kontekstu. Dlatego jeśli chcemy mieć pewność, że to są klamry a nie zakres, możemy postąpić z Twoją sugestią.
Odnośnie problemu autora:
Polecam strony w stylu https://regexr.com/ . Można tam wkleić swoje wyrażenie i podać przykładowy tekst, który chcemy dopasować. Od razu dostaniemy informację czy wyrażenie jest poprawne. Jeśli jest, w ramce na dole można przeczytać wyjaśnienie tego co wyrażenie robi. Po lewej: ściąga jak dla zielonego. Do tego https://www.php.net/manual/en/pcre.pattern.php
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.