1

在 HTML 页面中是这样的一行:

<p><strong>State:</strong> <a href="/state/show/Ohio">Ohio</a></p>

我正在寻找的是一个正则表达式,它获取<strong>State:</strong>和 EOL 之间的内容。

我已经尝试过了,但它不起作用,因为它忽略了</a></p>-"end"

preg_match('/<strong>State:(.*)<\/a><\/p>/',$html,$format);
4

1 回答 1

1

描述

此正则表达式将找到<p><strong>State:</strong>并返回从</strong>行尾到第 1 组的所有内容。请注意,通过包含$符号,您还需要包含m强制正则表达式允许$匹配行尾的选项。

使用您的示例文本:<p><strong>State:</strong> <a href="/state/show/Ohio">Ohio</a></p>

正则表达式:<p><strong>State:(</strong>.*?$)

在此处输入图像描述

第 1 组将有</strong> <a href="/state/show/Ohio">Ohio</a></p>

如果您真的只想在不包括 close 的强标签组之后直接捕获锚标签,请</p>尝试以下操作:

正则表达式:<p><strong>State:</strong>\s*(.*?)</p>$

在此处输入图像描述

第 1 组将有<a href="/state/show/Ohio">Ohio</a>

免责声明

从长远来看,使用正则表达式解析 HTML 可能不是最容易维护的事情。但是,如果您可以控制输入文本,则文本仍然非常简单,并且您愿意遇到常规表达式可能失败的周期性边缘情况,那么正则表达式将为您工作。

PHP Html 解析

肥皂盒就够了。如果您已准备好研究 PHP 中的 html 解析,请查看以下示例:拉取页面上的所有锚标记并返回其 href 属性和链接文本:

$dom = new DOMDocument;
$dom->loadHTML(file_get_contents('http://www.YourPageHere.com/')); 

// echo Links and their anchor text
echo '<pre>';
echo "Link\tAnchor\n";
    foreach($dom->getElementsByTagName('a') as $link) {
    $href = $link->getAttribute('href');
    $anchor = $link->nodeValue;
    echo $href,"\t",$anchor,"\n";
    }
echo '</pre>';
于 2013-06-08T02:46:21.250 回答