Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkca preg_match
Micchaleq
post
Post #1





Grupa: Zarejestrowani
Postów: 186
Pomógł: 4
Dołączył: 13.10.2009

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
vonski
post
Post #2





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 "$").

Ten post edytował vonski 11.10.2013, 01:43:16


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 19:42