• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP wyrażenia regularne.

Object Storage Arubacloud
0 głosów
121 wizyt
pytanie zadane 11 stycznia 2018 w PHP przez arek01996 Stary wyjadacz (12,100 p.)

Witam,

Walczę już prawię godzinę z prostym wyrażeniem regularnym.

Otóż chce w tekście zamienić {dowolny tekst} na jakiś inny tekst. Problem w tym że nie umiem napisać wyrażenia regularnego dla preg_replace. Aktualnie mam coś takiego ale nie do końca mi to działa:

/{+\[a-zA-Z0-9_]+\}/

Ale nie chce mi to działać. Czy mogę liczyć na pomoc kogoś bardziej ogarniętego?

Pozdrawiam :)

 

2 odpowiedzi

+1 głos
odpowiedź 11 stycznia 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 11 stycznia 2018 przez arek01996
 
Najlepsza

Usuń \ sprzed nawiasów kwadratowych i powinno działać. {dowolny tekst} nie pasuje jednak do tego wyrażenia, bo nie dopuszcza odstępu, bez niego powinno być ok.

komentarz 11 stycznia 2018 przez arek01996 Stary wyjadacz (12,100 p.)
Dziękuje,

Działa :)
0 głosów
odpowiedź 11 stycznia 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Dawno już nie siedziałem w PHP więc napiszę Ci to w JS, ale myślę, że łatwo przerobisz sobie na PHP:

const str = 'xxx {text text} abc {jakiś tekst} kkk';

//Przykład zły:
str.replace( /\{.+\}/g, '{nowy}' )
"xxx {nowy} kkk"

//Przykład dobry:
str.replace( /\{.+?\}/g, '{nowy}' )
"xxx {nowy} abc {nowy} kkk"

Chodzi o coś takiego? Rozumiem, że chcesz wyszukać wszystkie { dowolny tekst } i zamienić na { nowy }, przy czym dla wszystkich "dowolnych" nowy jest taki sam?

W powyższych przykładach słowo klucz to kwantyfikator niezachłanny - zauważ dodatkowy "?" po kwantyfikatorze "+". Bez tego regexp dopasowuje pierwszy nawias "{" następnie różne znaki i ostatni nawias, włączając w to również nawiasy wewnętrzne. Kwantyfikator niezachłanny działa inaczej, po napotkaniu "{" rozpoczyna szukanie dalszych znaków dalej od lewej do prawej przez co może dopasować wszystkie elementy.

Twój wzorzec dopasowuje coś zupelnie innego:

/{+\[a-zA-Z0-9_]+\}/

{+          //co najmniej jeden "{"
\[          //dosłowne dopasowanie nawiasu "["
a-zA-Z0-9_  //dosłowne dopasowanie takiego ciągu znakowego
]+          //co najmniej jeden nawias "]"
\}          //dokładnie jeden nawias "}"

//Testy w JavaScript:
/{+\[a-zA-Z0-9_]+\}/.test('{[a-zA-Z0-9_]}');          //true
/{+\[a-zA-Z0-9_]+\}/.test('{{{{{[a-zA-Z0-9_]]]]]]}'); //true
/{+\[a-zA-Z0-9_]+\}/.test('{text}');                  //false

Zobacz czy mój wzorzec (z kwantyfikatorem niezachłannym) spełnia Twoje oczekiwania i daj znać gdyby dalej coś było nie tak - wtedy też podaj dane wejściowe, na których chcesz inne zachowanie.

Aha, i w Twoim wzorcu nie dopasujesz też polskich liter ąę itp. bo nie mieszczą się one w a-z :)

Podobne pytania

+1 głos
1 odpowiedź 244 wizyt
0 głosów
2 odpowiedzi 425 wizyt
pytanie zadane 17 września 2019 w PHP przez progNewbie Obywatel (1,130 p.)
+2 głosów
1 odpowiedź 141 wizyt
pytanie zadane 5 października 2020 w Inne języki przez apofix Początkujący (270 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...