Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wyrażenie regularne - nie wyciąga znaczników
Forum PHP.pl > Forum > Przedszkole
sweter
Witam,

Mam zmienną zawierającą kawałek kodu XML:

  1. $plik = "<text1>Hello world</text1>";


Aby wyciągnąć, to co jest pomiędzy znacznikami użyłem preg_match_all():

  1. preg_match_all("/<text1>(.|\s)*?<\/text1>/", $plik, $wynik);


Gdy jednak wstawię jakiś inny znacznik pomiędzy <text1> i </text1>:

  1. $plik = "<text1>Hello world<cos>d</cos></text1>";


to jest on pomijany w wyniku:

Cytat
Hello worldd


Dlaczego?

piotrekkr
Zamien (.|\s) na (.*?).

  1. //$plik = "<text1>Hello world</text1>";
  2. $plik = "<text1>Hello world<cos>d</cos></text1>";
  3.  
  4. preg_match_all("#<text1>(.*?)</text1>#im", $plik, $wynik);
  5. var_dump($wynik);


Jeśli dasz (tutaj_cos)*? on będzie dopasowywał teks podobny to tego 'tutaj_costutaj_costutaj_cos' itd. Traktuje to co w nawiasie jako powtarzającą się sekwencję a nie to lub tamto x razy powtórzone.
sweter
Dzięki piotrekkr, ale wynik jest dokładnie taki sam jak z moim kodem sad.gif
A ja chciałem w tablicy $wynik mieć coś takiego:
Cytat
Hello world<cos>d</cos>
Fifi209
  1. preg_match_all("/<text1>(.*)<\/text1>/", $plik, $wynik);
piotrekkr
eee no ale tak dziala preg_match_all i tak zwraca wyniki...

Kod
array(2) {
  [0]=>
  array(1) {
    [0]=>
    string(38) "<text1>Hello world<cos>d</cos></text1>"
  }
  [1]=>
  array(1) {
    [0]=>
    string(23) "Hello world<cos>d</cos>"
  }
}


możesz jeszcze tak:
  1. preg_match_all("#<text1>(.*?)</text1>#im", $plik, $wynik, PREG_SET_ORDER);

Kod
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(38) "<text1>Hello world<cos>d</cos></text1>"
    [1]=>
    string(23) "Hello world<cos>d</cos>"
  }
}
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.