我有以下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。空的表示在这种情况下,它们根本不满足(开放>和关闭之间没有字符,或仅包含newline,或者仅包含一个空间或新线或少于5个字符。所以空虚很模糊。
如果我要匹配所有div,不仅空,我会使用以下正则言论:
<div id="page.*?">.*?</div>
自然我应该将其与dotall修饰符一起使用。
但是,当我尝试仅匹配空divs时,我会尝试使用此表达式:
<div id="page.*?">.{0,5}?</div>
我希望第一个和最后一个(第三(divs,因为它们包含:带有属性的开放div标签,然后可以从0到5个字符和关闭DIV标签。第一场比赛是正确的,但是第二场比赛是第二个和第三个Divs堆叠在一起,而不是仅第三次Div。我不明白为什么。
此正则是很简单的:
<div id="[^"]+?" style=[^>]+?>(s|n|[^n]{,5})</div>
只是注意到它不一定需要完全相同的id
和style
属性。
您可以尝试一下。
Scraper系列
/(?><div(?=(?:[^>"']|"[^"]*"|'[^']*')*?sids*=s*(?:(['"])s*page(?:(?!1)[Ss])*1))s+(?:"[Ss]*?"|'[Ss]*?'|(?:(?!/>)[^>])?)+>)s*[Ss]{0,5}s*</divs*>/
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 )
[Ss]
)*
1
)
)
s+
(?:
" [Ss]*? "
| ' [Ss]*? '
| (?:
(?! /> )
[^>]
)?
)+
>
)
s* # Optional whitespaces (remove if necessary)
[Ss]{0,5} # Optional 1-5 anything (including wsp)
s* # Optional whitespaces (remove if necessary)
</div s* >