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

PHP wyrażenia regularne.

VPS Starter Arubacloud
0 głosów
143 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 (288,770 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,490 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ź 256 wizyt
0 głosów
2 odpowiedzi 522 wizyt
pytanie zadane 17 września 2019 w PHP przez progNewbie Obywatel (1,130 p.)
+2 głosów
1 odpowiedź 151 wizyt
pytanie zadane 5 października 2020 w Inne języki przez apofix Początkujący (270 p.)

92,975 zapytań

141,939 odpowiedzi

321,181 komentarzy

62,302 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...