Regex 使用正则表达式匹配不带一个字符的范围
我想创建一个正则表达式模式,以捕获字符串中自关闭html标记内的所有内容,它将用于php preg_替换,从html dom字符串中删除所有通常不是自关闭的自关闭标记,即div、span等 这里有一个例子。在字符串中:Regex 使用正则表达式匹配不带一个字符的范围,regex,regex-negation,Regex,Regex Negation,我想创建一个正则表达式模式,以捕获字符串中自关闭html标记内的所有内容,它将用于php preg_替换,从html dom字符串中删除所有通常不是自关闭的自关闭标记,即div、span等 这里有一个例子。在字符串中: '<div id="someId><div class="someClass" /></div>' 我想得到这场比赛: '<div class="someClass" />' 但我一直没有找到对手或这场比赛: '<div
'<div id="someId><div class="someClass" /></div>'
我想得到这场比赛:
'<div class="someClass" />'
但我一直没有找到对手或这场比赛:
'<div id="someId><div class="someClass" />'
我尝试了以下正则表达式模式及其各种组合
一个简单的正则表达式模式,带有点通配符并排除>:
~<div.*?[^>].*?.*?/>~
负前瞻正则表达式:
~<div(?!.*?>.*?)/>~
负lookbehind正则表达式:
~<div.*?(?<!>).*?/>~
我遗漏了什么?改用解析器方法:
<?php
$html = <<<DATA
<div id="someId">
<div class="someClass" />
</div>
DATA;
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DomXPath($dom);
$divs = $xpath->query("//div[@class='someClass']");
foreach ($divs as $div) {
// do sth. useful here
}
?>
这将设置DOM并通过xpath表达式查找所涉及的div。似乎我不必要地将答案复杂化了: 对于我的示例,这将产生正确的结果:
~<div[^>]+?/>~
“div”可以由捕获组替换,以便在需要时包含其他标记使用以下正则表达式:
<div[^<]*\/>
这个正则表达式只是检查没有。*?上面只是一个例子,我应该更清楚地说明。我已经更新了这个问题。上面只是一个例子,我应该更清楚。但我不知道您上面提到的PHP中的DOM功能,因此非常感谢:
<div(?:[^<]*["'][^"']*["'][^<]*)\/>