2014-05-11 13 views
5

Ich möchte eine Nummer aus HTML, zwischen <td>...</td> extrahieren. Ich habe versucht, folgenden Code:Mehrere Wildcard preg_match_all PHP

$views = "/<td id=\"adv-result-views-(?:.*)\" class=\"spec\">(.*?)<\/td>/"; 

nach-views- ist eine Zufallszahl. Was ist der richtige Code zum Ignorieren der Zufallszahl bei der Suche?

+0

Können Sie ein Beispiel für den HTML-Code posten, den Sie abgleichen möchten? –

+0

'' Die Zahl 4 ist, was ich mit dem preg_match_all – user3625376

+0

'bekommen adv-Ergebnis-Aufrufe- \ d + ' – bansi

Antwort

1

eine DOM Verwendung wird der richtige Weg sein ..

auf diese Weise gehen ...

<?php 
$htm = '<td id="adv-result-views-190147977" class="spec"> 4 </td>'; 
$dom = new DOMDocument; 
$dom->loadHTML($htm); 
echo $content = $dom->getElementsByTagName('td')->item(0)->nodeValue; //4 
+0

Es sind nicht die Zahlen, die ich extrahieren möchte, sondern der "Sometext" in Ihrem Beispiel. Und ein DOM ist nicht möglich, da die Klasse in mehreren verwendet wird und die ID zufällig ist. – user3625376

+0

Ich glaube nicht, dass Sie die Frage vollständig verstanden haben. –

+0

@ user3625376, meinst du sowas? https://eval.in/149603 –

1
$html = '<td id="adv-result-views-190147977" class="spec"> 4 </td>'; 

// get the value of element 
echo trim(strip_tags($html)); 

// get the number in id attribute, replace string with group capture $1 
echo preg_replace('/^.*?id="[\pLl-]+(\d+).*$/s', '$1', $html); 
/* 
    ^.*?id="   Any character from the beginning of string, not gready 
     id="   Find 'id="' 
      [\pLl-]+ Lower case letter and '-' (1 or more times) 
      (\d+)  Group and capture to \1 -> digits (0-9) (1 or more times) -> end of \1      
    .*$     Any character, gready, until end of the string 
*/ 

// get html withut the number in id attribute 
echo preg_replace('/(^.*?id="[\pLl-]+)(\d+)(.*$)/s', '$1$3', $html); 

Dies ist ein regex Beispiel, da die Frage als solche markiert, aber DOM ist der bevorzugte Weg (vor allem in der SO-Community) für das Parsen von HTML.