[PHP7] Znak klamry w REGEXP

[PHP7] Znak klamry w REGEXP
C1
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:21
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.

edytowany 1x, ostatnio: co17rey
Sensacyjny Sebastian
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 23 godziny
  • Postów:384
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().

C1
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:21
0

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

Freja Draco
Freja Draco
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
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


PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
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


Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
C1
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:21
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.

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.