2013-04-15 18 views
10

Chcę pobrać tekst w tablicy między wszystkimi <span> </span> tagu z HTML, próbowałem z tym kodem ale zwraca tylko jedno wystąpienie:Jak uzyskać tekst w tablicy pomiędzy wszystkimi tagami <span> z HTML?

preg_match('/<span>(.+?)<\/span>/is', $row['tbl_highlighted_icon_content'], $matches); 

echo $matches[1]; 

Moje HTML:

<span>The wish to</span> be unfairly treated is a compromise attempt that would COMBINE attack <span>and innocen</span>ce. Who can combine the wholly incompatible, and make a unity of what can NEVER j<span>oin? Walk </span>you the gentle way, 

Mój kod zwraca tylko jedno wystąpienie znacznika span, ale chcę uzyskać cały tekst z każdego znacznika span w HTML w postaci tablicy php.

+4

[Parsing HTML z regex?] (Http://stackoverflow.com/a/1732454/1493698) – Antony

+0

Mam podobne pytanie tutaj http://stackoverflow.com/q/34569269/5477982 –

Odpowiedz

2

trzeba przełączyć się preg_match_all funkcji

Kod

$row['tbl_highlighted_icon_content'] = '<span>The wish to</span> be unfairly treated is a compromise attempt that would COMBINE attack <span>and innocen</span>ce. Who can combine the wholly incompatible, and make a unity of what can NEVER j<span>oin? Walk </span>you the gentle way,';  

preg_match_all('/<span>.*?<\/span>/is', $row['tbl_highlighted_icon_content'], $matches); 

var_dump($matches); 

jak widać teraz array jest prawidłowo wypełniona, dzięki czemu można echo wszystkie swoje mecze

+0

Dzięki, że Fabio ... rozwiązał mój wystaw przez swoją odpowiedź :) –

+0

Witaj stary! – Fabio

2

użycie preg_match_all() to samo, zwróci wszystkie wystąpienia w $ dopasowuje tablicę

http://php.net/manual/en/function.preg-match-all.php

+0

Nie można parsować HTML z wyrażeniem regularnym. [kiedykolwiek] (http://stackoverflow.com/a/1732454/1493698). – berkes

+1

jak wszystko, to zależy od kontekstu, to od programisty zależy, jak będą wyglądać jego dane, jeśli są to tylko tagi span bez specjalnej zawartości w środku, nie rozumiem, dlaczego nie – aleation

1

tutaj jest kod, aby uzyskać wszystkie wartości rozpiętości w tablicy

 $str = "<span>The wish to</span> be unfairly treated is a compromise 
attempt that would COMBINE attack <span>and innocen</span>ce. 
Who can combine the wholly incompatible, and make a unity 
of what can NEVER j<span>oin? Walk </span>you the gentle way,"; 

preg_match_all("/<span>(.+?)<\/span>/is", $str, $matches); 


echo "<pre>"; 
print_r($matches); 

wypisujesz będzie

Array 
(
    [0] => Array 
     (
      [0] => The wish to 
      [1] => and innocen 
      [2] => oin? Walk 
     ) 

    [1] => Array 
     (
      [0] => The wish to 
      [1] => and innocen 
      [2] => oin? Walk 
     ) 

) 

można użyć o lub 1 Index

0

Jeśli nie masz nic przeciwko używaniu komponentu innej firmy, chciałbym pokazać komponent Symfony's DomCrawler. Jest to bardzo prosty sposób analizowania plików HTML/XHTML/XML i nawigowania po węzłach.

Można nawet użyć selektorów CSS. Twój kod byłoby coś jak:

$crawler = new Crawler($html); 
$spans = $crawler->filter("span"); 
echo $spans[1]->getText();; 

Nawet nie trzeba mieć pełny dokument HTML/XML, jeśli przypisać tylko <span>...</span> część kodu, to będzie działać dobrze.