我在这里击败了这匹死马:
<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小时试图解决这个问题,但我似乎无法让它发挥作用。
所以,提前感谢任何能够解释我应该如何解决这个问题的人。 :)
答案 0 :(得分:1)
如果要更改的行必须介于<ul>
和</ul>
之间,那么您可以尝试类似以下sed
命令:
sed "/<ul>/,/<\/ul>/ s|<p style='margin: 5px 0;'>\(.*\)</p>|<li>\1</li>|g" test.html
在我指定地址范围的意义上,这不是使用仅正则表达式。 你真的需要小心使用HTML这些工具,但我同意这些评论。您不希望依赖于空格或标记如何位于行上。
另外,也许您可以告诉我们您使用的语言(如果重要)。