Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenia regularne - niedziałające odwołania, j.w.
Capellini
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 16.10.2007

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


Czy mógłby ktoś spojrzeć na poniższe wyrażenie?

  1. preg_match("/<(.*)>(.*)<\/\1>/", "Ten tekst jest odwrocony: <odwroc>fdgd</odwroc>", $matches);


Po wykonaniu tej instrukcji, $matches jest pustą tablicą, a wynik powinien być taki:

  1. $matches[0] == "<odwroc>fdgd</odwroc>"
  2. $matches[1] == "odwroc"
  3. $matches[2] == "fdgd"


Zauważyłem, że problem jest w odwołaniu \1 bo gdy \1 zastąpię słowem 'odwroc', to wszystko działa jak należy. Nadal nie wiem, co konkretniej jest nie tak.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Ellington
post
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 13
Dołączył: 24.03.2009

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


Uzyj

preg_match_all
Go to the top of the page
+Quote Post
wookieb
post
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Ellington @ 8.08.2009, 13:43:03 ) *


Nawet nie wiesz, że to nic nie zmienia. Więc jak coś radzisz to sprawdź a nie bredzisz.

Co do tematu to \1 (i podobne) można stosować w takich funkcjach jak pre g_replace a nie pre g_match i pre g_match_all. wiec twoje wyrazenie powinno wygladac mniej wiecej tak
  1. preg_match("/<(.*?)>(.*?)<(.*?)>/", "Ten tekst jest odwrocony: <odwroc>fdgd</odwroc>", $matches);
Go to the top of the page
+Quote Post
m44
post
Post #4





Grupa: Zarejestrowani
Postów: 63
Pomógł: 10
Dołączył: 16.11.2008

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


Jeśli chcesz stosować odwołania wsteczne w podwójnym cudzysłowie, to musisz poprzedzić jedynkę jeszcze jednym "\", tak:

Kod
preg_match("/<(.*)>(.*)<\/\\1>/", "Ten tekst jest odwrocony: <odwroc>fdgd</odwroc>", $matches);
Go to the top of the page
+Quote Post
Capellini
post
Post #5





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 16.10.2007

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


Teraz mam problem z innym wyrażeniem:

Kod
<.*?/\s*>


Czyli na przykład dla:

Kod
<a><b /></a>


Pasującym ciągiem powinno być
Kod
<b />
, a znajduje
Kod
<a><b />


To drugie też pasuje, ale specjalnie dałem po * znak zapytania, żeby dopasowywało leniwie więc powinno zwracać to pierwsze.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 01:20