代码之家  ›  专栏  ›  技术社区  ›  Bill Bisco

RegEx:删除模式及其后的所有内容

  •  0
  • Bill Bisco  · 技术社区  · 8 年前

    我有带标签的字符串 <p> </p> 我只想得到标签之间的一切,而不是标签本身。

    我已经让一半的正则表达式工作: ^[^_]*<p> 这给了我一个开始,但我仍然需要另一个正则表达式来摆脱 < .

    2 回复  |  直到 8 年前
        1
  •  2
  •   GiulioP    8 年前

    如果标签 p 具有任何属性(例如。 <p class="foo"> )你可能想扮演 <p.*?> 相反在这种情况下,您不能使用lookbehind操作符,因为所涉及的表达式没有固定的长度(lookbehind操作符没有这样的限制,尽管这在这里没有任何区别)。另一方面,keep操作符 \K 在任何表情之后都可以正常工作。

    因此,Nahuel的答案可以改进如下(不包括包含换行符的观察结果)

        <p.*?>\K.*?(?=<\/p>)
    
        2
  •  1
  •   Nahuel Fouilleul    8 年前

    使用lookbehind和lookahead保持标记不匹配,并使用 /s 修改器,以便。还匹配换行符

    (?<=<p>).*?(?=</p>)
    

    否则不带/s修改器

    (?<=<p>)[\s\S]*?(?=</p>)
    

    因为如果perl可以使用\K来缩短,仍然要保持不匹配

    <p>\K.*?(?=</p>)