我有以下HTML代码:
<div id="page126-div" style="position:relative;width:918px;height:1188px;">
</div>
<div id="page127-div" style="position:relative;width:918px;height:1188px;">
sometext for example
</div>
<div id="page128-div" style="position:relative;width:918px;height:1188px;">
</div>
我的任务是匹配空div。空在此上下文中表示它们根本不满足(打开&gt;和结束&lt;之间没有字符)或仅包含换行符,或仅包含空格或换行符或少于5个字符。空虚是非常模糊的。
如果我匹配所有div,不仅空,我会使用以下正则表达式:
\<div id="page.*?"\>.*?\<\/div\>
当然我应该使用dotall修饰符。
但是当我尝试只匹配空div时,我尝试使用这个表达式:
\<div id="page.*?"\>.{0,5}?\<\/div\>
我希望获得第一个和最后一个(第三个)div,因为它们包含:打开带有属性的div标签,然后div可以是0到5个字符的内容并关闭div标签。 第一场比赛是正确的,但第二场比赛是第二场和第三场比赛,而不是第三场比赛。 我不明白为什么。
答案 0 :(得分:1)
This regex非常简单:
<div id=\"[^"]+?\" style=[^>]+?>(\s|\n|[^\n]{,5})<\/div>
请注意,它并不一定需要完全相同的id
和style
属性。
答案 1 :(得分:0)
你可以尝试一下。
刮刀系列
/(?><div(?=(?:[^>"']|"[^"]*"|'[^']*')*?\sid\s*=\s*(?:(['"])\s*page(?:(?!\1)[\S\s])*\1))\s+(?:"[\S\s]*?"|'[\S\s]*?'|(?:(?!\/>)[^>])?)+>)\s*[\S\s]{0,5}\s*<\/div\s*>/
https://regex101.com/r/x8jf8D/1
格式化
(?>
< div # div tag
(?= # Asserttion (a pseudo atomic group)
(?: [^>"'] | " [^"]* " | ' [^']* ' )*?
\s id \s* = \s*
(?:
( ['"] ) # (1), Quote
\s* page # With 'id = "page XXX"
(?:
(?! \1 )
[\S\s]
)*
\1
)
)
\s+
(?:
" [\S\s]*? "
| ' [\S\s]*? '
| (?:
(?! /> )
[^>]
)?
)+
>
)
\s* # Optional whitespaces (remove if necessary)
[\S\s]{0,5} # Optional 1-5 anything (including wsp)
\s* # Optional whitespaces (remove if necessary)
</div \s* >