代码之家  ›  专栏  ›  技术社区  ›  Freddy

这个正则表达式有什么问题?

  •  1
  • Freddy  · 技术社区  · 16 年前

    首先,我不是正则表达式专家,所以我很肯定我做错了什么。

    下面是我的正则表达式:

    <(list)(\b[^>]*)>(<\1\b[^>]*>.*?<\/\1>|.)*?<\/\1>
    

    ...
    <list title="Lorem ipsum dolor sit amet, consectetur adipiscing elit...">
    <li>
        <list title="Lorem adipiscing...">
            <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
            <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
        </list>
    </li>
    <li>
         <list title="Lorem ipsum...">
            <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
        </list>
    </li>
    <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit
    </li>
    <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit
    </li>
    </list>
    ...
    

    我要匹配外部 <list> <列表> 但是当我试着读这群人的时候 \3 虽然组为空 \1 \2

    任何想法都将不胜感激。

    1 回复  |  直到 16 年前
        1
  •  6
  •   David Z    16 年前

    这个问题不能用正则表达式匹配来解决。说真的。我不是在重复“不要用regex解析HTML”的教条;正则表达式在逻辑上无法处理嵌套标记(这是 为什么? 每个人都说“不要用regex解析HTML”)

    我能给你的最好主意是使用XML解析器。如果您坚持使用正则表达式来解决这个问题,那么无论如何您都会编写自己的递归下降解析器,因此您最好利用其他人已经在这个问题上做过的工作。