假设我有一组包含(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='' />
是否有一个现成的解决方案。我应该使用REGEX吗?
答案 0 :(得分:2)
使用DOMDocument
。此特定示例需要&gt; = 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="">
答案 1 :(得分:0)
使用像这样的http://simplehtmldom.sourceforge.net/manual.htm
这样的DOM解析器使用此功能查找标签非常简单:
// 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>';
答案 2 :(得分: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
}
}
答案 3 :(得分: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);