2

假设我有一个带有一堆(0 个或更多)IMG 和 A 的文本,也许还有其他 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='' />

是否有现成的解决方案。我应该使用正则表达式吗?

4

4 回答 4

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="">
于 2013-08-16T06:06:39.027 回答
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);
于 2013-08-16T07:02:06.727 回答
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
    }   
}
于 2013-08-16T06:06:30.003 回答
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>'; 
于 2013-08-16T05:43:07.827 回答