2013-08-16 21 views
2

假設我有與IMG和A也許其他HTML標籤的一堆(0或更多)這樣的文字:正則表達式在PHP中:如何匹配任何A和IMG HTML標籤包括內容

hello world hello world <a href='ads'>hello</a> bla bla foo bar <img src='' /> 

我想在PHP的正則表達式中匹配任何A和IMG標籤。 A標籤應該在比賽中包含TAG內容。 A和IMG以外的其他標籤現在可以被丟棄。

所以結果應該是:

//match 1 
<a href='ads'>hello</a> 
//match 2 
<img src='' /> 

也許有一個現成的解決方案。我應該使用REGEX嗎?

+0

*我應該使用正則表達式?*我認爲已經回答過這個網站。 – alex

+0

是的。我不知道你指的是哪種情況,但是我的情況稍微複雜一些。並非所有的HTML標籤和混合的HTML標籤都包含一些內容。 –

+3

使用DOM解析器。 – anubhava

回答

0

使用DOM解析器這樣一個http://simplehtmldom.sourceforge.net/manual.htm

與該發現標籤是非常容易的:

// Create DOM from URL or file 
$html = file_get_html('http://www.google.com/'); 

// Find all images 
foreach($html->find('img') as $element) 
     echo $element->src . '<br>'; 

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>'; 
0

使用DOM

$dom = new DOMDocument(); 
$dom->loadHTML("hello world hello world <a href='ads'>hello</a> bla bla foo bar <img src='' />"); 
$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('//a | //img'); 
foreach($nodes as $node){ 
    if($node->tagName=='a'){ 
     //links 
    } else if($node->tagName=='img'){ 
     //images 
    } 
} 
2

使用DOMDocument。該特定例子中,需要> = 5.3.6:

$content = <<<EOM 
hello world hello world <a href='ads'>hello</a> bla bla foo bar <img src='' /> 
EOM; 

$doc = new DOMDocument; 
$doc->loadHTML($content); 
$xp = new DOMXPath($doc); 

foreach ($xp->query('//a | //img') as $node) { 
     echo $doc->saveHTML($node); 
} 

輸出:

<a href="ads">hello</a><img src=""> 
0

這將示出了在一個陣列中的所有IMG標籤和標籤作爲另一基團陣列。

$match = array(); 

echo $str = "hello world hello world <a href='ads'>hello<img src='test1' /></a> bla bla  foo bar <img src='' /> fssf <img src='test2' />"; 

// IMG賽事

preg_match_all("/<img[^>]+\>/i", $str, $match); 
echo "IMG Match"; 
if (is_array($match[0])) { 
    foreach ($match[0] as $key => $val) { 
     echo "<br/>" . $val; 
    } 
} 
var_dump($match); 

$match = array(); 
//A Match 
preg_match_all("#<a[^>]*>.*?</a>#i", $str, $match); 
echo "<A> Match <br/>"; 
if (is_array($match[0])) { 
    foreach ($match[0] as $key => $val) { 
     echo "<br/>" . $val; 
    } 
} 
var_dump($match); 
相關問題