我正在使用php,我有问题用文本解析锚标记的href。
示例:具有测试http://www.test.com
喜欢这个<a href="http://www.test.com" title="test">http://www.test.com</a>
我希望匹配锚标记中的所有文字
提前感谢。
答案 0 :(得分:6)
使用DOM:
$text = '<a href="http://www.test.com" title="test">http://www.test.com</a> something else hello world';
$dom = new DOMDocument();
$dom->loadHTML($text);
foreach ($dom->getElementsByTagName('a') as $a) {
echo $a->textContent;
}
DOM专门用于解析XML和HTML。它会比您提出的任何正则表达式解决方案更强大。
答案 1 :(得分:-1)
假设您希望选择具有该href的锚链接的链接文本,那么这样的事情应该有用......
$input = '<a href="http://www.test.com" title="test">http://www.test.com</a>';
$pattern = '#<a href="http://www\.test\.com"[^>]*>(.*?)</a>#';
if (preg_match($pattern, $input, $out)) {
echo $out[1];
}
这在技术上并不完美(理论上&gt;可以在其中一个标签中使用),但在99%的情况下都可以使用。正如一些评论所提到的那样,你应该使用DOM。
答案 2 :(得分:-1)
如果您已经获得了锚标记,则可以通过正则表达式轻松提取href属性:
<a [^>]*href="([^"])"[^>]*>
如果您想要提取标记的内容并且知道自己在做什么,那么编写一个简单的递归下降解析器(使用级联正则表达式)并不难,它将解析除最病态的所有情况之外的所有情况。不幸的是,PHP不是学习如何做到这一点的好语言,因此我不建议使用这个项目来学习如何。
因此,如果它是您所追求的内容,而不是属性,则@katrielalex是正确的:不要使用正则表达式解析HTML。使用嵌套格式标签和其他与正则表达式不兼容的合法HTML,您将遇到一个受伤的世界。