我正在尝试匹配此字符串的突出显示部分:
<iframe maybe something here src="http://some.random.url.com/" and the string continues...
如果它放在标签内,我需要匹配src =“”。 iframe标记可以放在源代码中的任何位置。
提前致谢! :)
答案 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
那就是说,你的特殊情况并没有真正解析......只是字符串匹配。 在我的答案之前已经列举了这些方法......