Regex 匹配特定标记后的所有标记

Regex 匹配特定标记后的所有标记,regex,textmate,Regex,Textmate,我在这里打败这匹死马: <p style='margin: 5px 0;'>I wan't be matched!</p> <p style='margin: 5px 0;'>me 2!</p> <ul> <li> <b>Lorem</b> ipsum sit dolor amet </li> <li> <b&

我在这里打败这匹死马:

<p style='margin: 5px 0;'>I wan't be matched!</p>
<p style='margin: 5px 0;'>me 2!</p>
<ul>
    <li>
      <b>Lorem</b>
      ipsum sit dolor amet
    </li>

    <li>
      <b>Lorem</b>
      ipsum sit dolor amet
    </li>

    <li>
      <b>Lorem</b>
      ipsum sit dolor amet
    </li>

    <li>
      <b>Lorem</b>
      ipsum sit dolor amet
    </li>

    <p style='margin: 5px 0;'>can i haz regex</p>
    <p style='margin: 5px 0;'>NO! you can't</p>
    <li>
      <b>Lorem</b>
      ipsum sit dolor amet
    </li>   
<ul>

我不想成为对手

我2

  • 洛勒姆 同侧坐卧位
  • 洛勒姆 同侧坐卧位
  • 洛勒姆 同侧坐卧位
  • 洛勒姆 同侧坐卧位
  • 我可以喝黑啤酒吗

    不你不能

  • 洛勒姆 同侧坐卧位
从那以后,我需要一个正则表达式来改变所有的

    <p style='margin: 5px 0;'>can i haz regex</p>

我可以喝黑啤酒吗

在标记之后,并将其转换为

    <li>can i haz regex</li>
  • 我可以用haz regex吗
  • 这么简单,但考虑到我在regex是一个真正的傻瓜,我无法完成它

    我试着用“回头看”的表情,但没有成功

      (?m:(?<=(.*?<ul>.*?)(<p style='margin: 5px 0;'>.*?</p>)+)
    

    (?m:(?如果要更改的行必须介于
    之间,则可以尝试以下
    sed
    命令:

    sed "/<ul>/,/<\/ul>/ s|<p style='margin: 5px 0;'>\(.*\)</p>|<li>\1</li>|g" test.html
    
    sed”/
      /,//s|

      \(.*)

    • \1
    • |g”test.html
    这不仅仅是使用regex,因为我也指定了一个地址范围。 不过,在HTML中使用这些工具时,你确实需要小心,我同意这些评论。首先,你不想依赖于空格或标记在行上的位置


    另外,也许你可以告诉我们你在用什么语言(如果有关系的话).

    我建议使用正则表达式以外的东西来解析HTML或XML:在发布之前请阅读这些内容,但遗憾的是,这对我没有用。哪一部分没有用?是告诉你它不起作用的部分,还是告诉你改用HTML解析器的部分?没有用,因为我不想在这里解析任何东西,我只需要匹配我已经通过正则表达式匹配了一个完整的HTML文件,所以这篇文章中的说法是有争议的。我可以看到正则表达式有一些限制,但这并不意味着“它不能用来解析HTML”解析文档是匹配的一部分,问题不在于regex不能用于解析HTML,而在于它不应该用于解析HTML。有更好、更简单的方法可以做到这一点,只需要在速度上做一点折衷。我知道基于regex的系统的风险,但我需要将XML转换为sql语句,并考虑在我需要计算的所有模式中,在我完成工作的短短时间里,这似乎是唯一可行的选择。无论如何,它就像一个魅力!非常感谢:)