Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式匹配不带一个字符的范围_Regex_Regex Negation - Fatal编程技术网

Regex 使用正则表达式匹配不带一个字符的范围

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

我想创建一个正则表达式模式,以捕获字符串中自关闭html标记内的所有内容,它将用于php preg_替换,从html dom字符串中删除所有通常不是自关闭的自关闭标记,即div、span等

这里有一个例子。在字符串中:

'<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(?:[^<]*["'][^"']*["'][^<]*)\/>