[PHP7] Znak klamry w REGEXP

0

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.

1
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().

0

Masz rację z kropką, ale podany tekst tekst to przykład i z szybkości wpisałem kropkę. powinno być imienazwisko - już poprawiam.

2

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

1
Freja Draco napisał(a):

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

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

0

Dzięki za odpowiedzi. Za szybko napisałem post. Problemem było to, że ciąg znaków imienazwisko zawierało cyfrę na końcu. Jak usunąłem klamry to działało i teraz wiadomo dlaczego. Dopisałem zakres 0-9 i działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1