0

我在这里打败了这匹死马:

<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>

就这么简单,但考虑到我是正则表达式的真正菜鸟,我无法完成它。

我正在尝试用look behind expression,但没有成功

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

我试图弄清楚大约 2 小时,但我似乎无法让它发挥作用。所以提前感谢任何可以解释我应该如何解决这个问题的人。:)

4

1 回答 1

1

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

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

从我也指定地址范围的意义上说,这不仅仅是使用正则表达式。但是,您确实需要小心将这些工具与 HTML 一起使用,但我同意这些评论。首先,您不想依赖空格或标签如何位于行上。

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

于 2012-05-31T19:18:03.217 回答