【发布时间】:2011-04-07 20:57:49
【问题描述】:
我正在尝试匹配此字符串的突出显示部分:
【问题讨论】:
我正在尝试匹配此字符串的突出显示部分:
【问题讨论】:
您应该为此使用 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 />';
}
?>
【讨论】:
<iframe ... 标签,或者您的正则表达式可能无法处理可能出现在<iframe 和@987654325 之间的某些字符@ 标记,或者您可能会在 src 属性的末尾弄错分隔符(属性可能不会被引用),如果您使用,您必须自己对 src 属性的内容进行 HTML 实体解码一个正则表达式,等等。当您在正则表达式中处理所有这些情况时,与仅使用 DOM 解析器相比,它会更长、更复杂并且更容易出错。
<?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 解析器以获得良好的证明解决方案。
【讨论】:
如果你的源是格式良好的 xml,你也可以使用 xpath 来查找字符串。
<?php
$file = simplexml_load_file("file.html");
$result = $file->xpath("//iframe[@src]/@src");
?>
【讨论】:
正则表达式将是最简洁的方法:
preg_match('<iframe.+?src="(.+?)".+?<\/iframe>', $iframe);
print_r($iframe);
array([0] => whole reg ex match, [1] => your src url);
【讨论】:
见RegEx match open tags except XHTML self-contained tags
也就是说,您的特定情况并没有真正解析......只是字符串匹配。 在我在这里回答之前已经列举了这些方法......
【讨论】:
您应该使用 DOM 解析器,但如果您有理由必须使用正则表达式,则此正则表达式会帮助您入门
.*(?<iframeOpening><iframe)\s[^>]*(?<iframeSrc>src=['"][^>'"]+['"]?).*
顺便说一下,它使用命名的捕获组,这是它们的工作原理
preg_match('/.*(?<iframeOpening><iframe)\s[^>]*src=[\'"](?<iframeSrc>[^>\'"])+[\'"]?.*/', $searchText, $groups);
print_r($groups['iframeSrc']);
【讨论】: