如何匹配<iframe>标记的一部分?</iframe>

时间:2010-09-03 13:47:25

标签: php html regex match

我正在尝试匹配此字符串的突出显示部分:

<iframe maybe something here src="http://some.random.url.com/" and the string continues...

如果它放在标签内,我需要匹配src =“”。 iframe标记可以放在源代码中的任何位置。

提前致谢! :)

6 个答案:

答案 0 :(得分:14)

您应该使用DOM解析器。这是DOMDocument的一个例子:

<?php
    $document = new DOMDocument();
    $document->loadHTML(file_get_contents('yourFileNameHere.html'));
    $lst = $document->getElementsByTagName('iframe');

    for ($i=0; $i<$lst->length; $i++) {
        $iframe= $lst->item($i);
        echo $iframe->attributes->getNamedItem('src')->value, '<br />';
    }
?>

答案 1 :(得分:3)

<?php
$html='<iframe maybe somethin gere src="http://some.random.url.com/" and blablabla';

preg_match('|<iframe [^>]*(src="[^"]+")[^>]*|', $html, $matches);

var_dump($matches);

输出:

array(2) {
  [0]=>
  string(75) "<iframe maybe somethin gere src="http://some.random.url.com/" and blablabla"
  [1]=>
  string(33) "src="http://some.random.url.com/""
}

但这是使用正则表达式执行此操作的快速方法,这可能会破坏不洁的HTML或导致问题,请使用dom解析器以获得良好的证明解决方案。

答案 2 :(得分:2)

如果你的源码是格式良好的xml,你也可以使用xpath来查找字符串。

<?php
  $file = simplexml_load_file("file.html");
  $result = $file->xpath("//iframe[@src]/@src");
?>

答案 3 :(得分:2)

正则表达式将是最简洁的方法:

preg_match('<iframe.+?src="(.+?)".+?<\/iframe>', $iframe);

print_r($iframe);

array([0] => whole reg ex match, [1] => your src url);

答案 4 :(得分:1)

您应该使用DOM解析器,但是如果您有必要使用正则表达式的原因,这个正则表达式会让您入门

.*(?<iframeOpening><iframe)\s[^>]*(?<iframeSrc>src=['"][^>'"]+['"]?).*

顺便使用命名捕获组,这是它们的工作方式

preg_match('/.*(?<iframeOpening><iframe)\s[^>]*src=[\'"](?<iframeSrc>[^>\'"])+[\'"]?.*/', $searchText, $groups);
print_r($groups['iframeSrc']);

答案 5 :(得分:1)

请参阅RegEx match open tags except XHTML self-contained tags

那就是说,你的特殊情况并没有真正解析......只是字符串匹配。 在我的答案之前已经列举了这些方法......