Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkca preg_match
Forum PHP.pl > Forum > PHP
Micchaleq
Witam serdecznie,

Mam problem otóż nie potrafie stworzyć prostego zapytania.

mam jakiś tam content "witaj {{ test }} zegnaj" chciałbym wyciągnąć sobie to co jest pomiędzy {{ }} w tym przypadku test
Moja fukcja to

  1. preg_match('/^{{*}}/', "witaj {{ test }} zegnaj", $matches);


Co robie źle?
vonski
Twoje wyrażenie zakłada przede wszystkim że nawiasy mają się znaleźć na samym początku zdania ("^" - początek ciągu) więc "witaj {{ test }} zegnaj" nie pasuje do wzorca.
Druga rzecz, że gwiazdka "*" w składni PCRE oznacza 0 lub więcej wystąpień (nie, jakby się mogło wydawać, dowolny znak; dowolny znak to kropka). Tak więc w powyższe w skrócie oznacza:
ciąg ma się zaczynać od nawiasu, potem ma być zero lub więcej nawiasów, a potem mają być dwa nawiasy zamykające, a potem cokolwiek lub nic smile.gif
Na marginesie, nawiasy: "{" i "}" są w pewnych przypadkach znakami specjalnymi, więc dla pewności poprzedzałbym je backslashem, ale w powyższym (i poniższym) przypadku akurat nie jest to konieczne.

Poprawnie powinno być:

  1. preg_match('/\{\{\s(.+)\s\}\}/', $str, $match);


Czyli: ciąg zaczyna się od czegokolwiek (brak "^"), potem mają być dwa nawiasy "\{\{", potem spacja (w Twoim przykładowym stringu słwo "test" poprzedzone jest spacją - "\s"), potem ma być dowolny znak co najmniej raz powtórzony (".+"), potem ma być spacja, potem dwa nawiasy zamykające "\}\}", a potem cokolwiek, lub nic (brak "$").
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.