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

时间:2018-02-22 18:33:41

标签: regex

我有以下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标签。 第一场比赛是正确的,但第二场比赛是第二场和第三场比赛,而不是第三场比赛。 我不明白为什么。

2 个答案:

答案 0 :(得分:1)

This regex非常简单:

<div id=\"[^"]+?\" style=[^>]+?>(\s|\n|[^\n]{,5})<\/div>

请注意,它并不一定需要完全相同的idstyle属性。

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