如何将模糊的空div与正则表达式匹配



我有以下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>

只是注意到它不一定需要完全相同的idstyle属性。

您可以尝试一下。

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* >

最新更新