【发布时间】:2011-08-21 21:07:21
【问题描述】:
我有一个从 RSS 提要中提取的 html 输出,它是这样的:
<div>
<p>
Some text
</p>
<iframe src="http://www.source.com"></iframe>
</div>
问题是我只需要 iframe 标签的 attr "src",有没有办法用 PHP 来获取它?可能是正则表达式?
提前致谢!
【问题讨论】:
我有一个从 RSS 提要中提取的 html 输出,它是这样的:
<div>
<p>
Some text
</p>
<iframe src="http://www.source.com"></iframe>
</div>
问题是我只需要 iframe 标签的 attr "src",有没有办法用 PHP 来获取它?可能是正则表达式?
提前致谢!
【问题讨论】:
如果您始终只获得上面列出的数据,则可以使用简单的子字符串,使用 src=" 和 "><iframe 的字符串位置来指定您想要的子字符串:
$html = '<div><p>Some text</p><iframe src="http://www.source.com"></iframe></div>';
$start = strpos($html, 'src="') + 5;
$length = strpos($html, '"></iframe') - $start;
$src = substr($html, $start, $length);
echo $src;
EDIT - 修复代码并拆分为多行。这很容易成为单行,但是 - 认为如果我分成多行更容易理解。
【讨论】:
【讨论】:
src 属性,则不需要更强大的。 IMO,SimpleXML 的 simple 特性在这种情况下是正确的。
我不是正则表达式专家,但另一种方法是在 " 标记上使用 explode 并像这样得到 array[1]:
$rssFeed = '<div>
<p>
Some text
</p>
<iframe src="http://www.source.com"></iframe>
</div>';
$rssArray = explode('"', $rssFeed);
echo $rssArray[1];
这要求您的 RSS 提要非常一致,但如果“某些文本”部分包含 " 标记,这会搞砸并且您会得到错误的字符串。
您可以在数组中查看以http 或www 开头的所有内容以解决错误,但同样,它需要非常一致的 RSS 提要,因此您必须自己判断这是否可以完成工作足够好。
【讨论】:
你可以用一个小的命令行 perl 脚本来解析这个输出。这可能非常健壮,具体取决于您制作正则表达式的通用程度。
例如,
$command = "echo your_html_output | perl -pe 's/src=\"(.*)\"/$1/'"; # Capture what is in between src=" and the " (the closing quote)
$output = shell_exec("$command");
【讨论】: