匹配特定标签后的所有标签

时间:2012-05-31 18:15:48

标签: 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>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>

从那里我需要一个改变所有

的正则表达式
    <p style='margin: 5px 0;'>can i haz regex</p>

在标记之后将其转换为

    <li>can i haz regex</li>
这很简单,但考虑到我是正则表达式中真正的菜鸟,我无法完成它。

我试着看看背后的表情,但没有成功

  (?m:(?<=(.*?<ul>.*?)(<p style='margin: 5px 0;'>.*?</p>)+)
我大约2小时试图解决这个问题,但我似乎无法让它发挥作用。 所以,提前感谢任何能够解释我应该如何解决这个问题的人。 :)

1 个答案:

答案 0 :(得分:1)

如果要更改的行必须介于<ul></ul>之间,那么您可以尝试类似以下sed命令:

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

在我指定地址范围的意义上,这不是使用正则表达式。 你真的需要小心使用HTML这些工具,但我同意这些评论。您不希望依赖于空格或标记如何位于行上。

另外,也许您可​​以告诉我们您使用的语言(如果重要)。