2009-10-19 13 views
14

Witam chciałbym używać preg_match w PHP do analizowania „żądany tekst” z następujących z dokumentu htmlPreg mecz tekst w php pomiędzy znacznikami html

<p class="review"> Desired text </p> 

Zwykle użyłbym simple_html_dom dla takich rzeczy ale przy tej okazji nie można go użyć (powyższy element nie pojawia się w każdym pożądanym znaczniku div, więc jestem zmuszony użyć tego podejścia, aby śledzić dokładnie, kiedy się nie pojawi, a następnie dostosować moją tablicę z simple_html_dom odpowiednio) .

W każdym razie to rozwiązałoby mój problem.

Dziękuję bardzo.

Odpowiedz

54
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match); 
if($match) echo "result=".$match[1]; 
+1

Działa idealnie. Zaoszczędziłeś mi kilka godzin tam, dziękuję za to. –

+1

Serdecznie zapraszamy :) – serg

+0

Czy to nie jest zbyt duże prawdopodobieństwo pokrycia kosztów? Zobacz moją odpowiedź poniżej. –

6

Co jeśli ciąg jesteś dopasowanie ma wiele linii i wynosi:

<p class="review"> Desired text1 </p> 
<p class="review"> Desired text2 </p> 
<p class="review"> Desired text3 </p> 

To wzór będzie pasował raz, a mecz będzie wszystko w ciągu.

myślę, że lepiej jest wzór:

"'<p class=\"review\">([^<]*)</p>'si" 
+0

tak, dziękuję, próbowałem rzeczy przez ostatnie 2 godziny i w końcu zdałem sobie sprawę, że zapasy są wyświetlane z JavaScript, po załadowaniu strony: (((tak, więc, dlatego skrypt nie działał dzięki wszystkim. –

+0

Zdecydowanie właściwa odpowiedź. – user1645377

10

jeśli chcesz zwracać wiele mecze następnie trzeba użyć preg_match_all(). Następnie przechodzisz do drugiej grupy wyników ($ match [1]), aby uzyskać tylko zawartość między tagami.

$source = "<p class=\"review\"> Desired text1 </p>". 
"<p class=\"review\"> Desired text2 </p>". 
"<p class=\"review\"> Desired text3 </p>"; 


    preg_match_all("'<p class=\"review\">(.*?)</p>'si", $source, $match); 

    foreach($match[1] as $val) 
    { 
     echo $val."<br>"; 


    } 

Outputs: 

Desired text1 
Desired text2 
Desired text3 
Powiązane problemy