2016-06-29 9 views
0
)

Wie soll ich den Text zwischen 2 HTML-Tags, die nicht immer die gleichen sind. Wie sollte ich Regex "einen Teil" ignorieren lassen?Erhalten Sie Text zwischen 2 Tags, die sich ändern (Regex) (

Können sagen, das ist mein html:

<html> 
... 
<span id="ctl00_ContentPlaceHolder1_gvDomain_ctl03_lblName">stirng 1</span> 
... 
<span id="ctl00_ContentPlaceHolder1_gvDomain_ctl04_lblName">string 2</span> 
... 
<span id="ctl00_ContentPlaceHolder1_gvDomain_ctl53_lblName">string 3</span> 
... 
</html> 

Wie Sie das ctlxx Teil sehen, ist nicht immer gleich, dieser Code wird nur die erste Saite:

preg_match('#\\<span id="ctl00_ContentPlaceHolder1_gvDomain_ctl03_lblName">(.+)\\</span>#s',$html,$matches); 
$match = $matches[0]; 
echo $match; 

Wie kann ich regex lassen ignoriere den ctlxx Teil und echo alle Strings?

Vielen Dank im Voraus

+0

Möchten Sie Werte von Span-Tags zurückgeben? – splash58

+0

Keine Zeichenketten zwischen den Span-Tags, also in diesem Fall: Zeichenkette 1, Zeichenkette 2, Zeichenkette 3 – Gamerifty

+0

Sie können Javascript verwenden. getElementById ("id"). innerHTML gibt Ihnen den Inhalt –

Antwort

0

Sie es von DomDocument und DOMXPath mit der Verwendung von preg_match tun können

$dom = new DOMDocument(); 
$dom->loadHTML($str); 

$x = new DOMXpath($dom); 

// Next two string to use Php functions within within Xpath expression 
$x->registerNamespace("php", "http://php.net/xpath"); 
$x->registerPHPFunctions(); 

// Select span tags with proper id 
foreach($x->query('//span[php:functionString("preg_match", "/ctl00_ContentPlaceHolder1_gvDomain_ctl\d+_lblName/", .)]') as $node) 
    echo $node->nodeValue; 
0

Wenn Sie es mit regulärem Ausdruck lösen wollen, dann können Sie so etwas wie diese

<?php 
    preg_match('/<span id="[^"]*">(.+)<\/span>/is',$html,$matches); 
    $match = $matches[0]; 
    echo $match; 
tun
Verwandte Themen