例如,我有HTML:
<strong>this one</strong> <span>test one</span>
<strong>this two</strong> <span>test two</span>
<strong>this three</strong> <span>test three</span>
如何使用正则表达式使所有文本变得强大并且跨越?
答案 0 :(得分:2)
使用DOM
和 从不 使用正则表达式来解析HTML。
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('strong') as $tag) {
echo $tag->nodeValue."<br>";
}
foreach ($dom->getElementsByTagName('span') as $tag) {
echo $tag->nodeValue."<br>";
}
<强> OUTPUT :
强>
this one
this two
this three
test one
test two
test three
HTML不是常规语言,因此无法通过常规语言进行解析 表达式。正则表达式查询无法将HTML分解为 它有意义的部分。这么多次,但它没有找到我。甚至 Perl使用的增强的不规则正则表达式不符合 解析HTML的任务。
那篇文章来自我们的 Jeff Atwood 。阅读更多here.
答案 1 :(得分:2)
使用DOMDocument
加载HTML字符串,然后使用XPath表达式获取所需的值:
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//strong | //span') as $node) {
echo $node->nodeValue, PHP_EOL;
}
输出:
this one
test one
this two
test two
this three
test three
答案 2 :(得分:0)
您可以使用捕获的群组。以下是一些例子:
<strong>([^\<]*)<\/strong>
演示:http://regex101.com/r/sK5uF2
和
<span>([^\<]*)<\/span>
演示:http://regex101.com/r/vJ2kP3
在每个中,第一个捕获的组是您的文字:\1
或$1