2012-05-31 237 views
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> 

很简单,但考虑到我是一个真正的noob在正则表达式,我无法完成它。

我背后表达一下尝试,但没有成功

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

这是2个小时左右,我试图弄明白,但我没有真正似乎可以使它发挥作用。 提前感谢任何能解释我如何解决这个问题的人。 :)

+0

我会建议使用正则表达式以外的东西来解析HTML或XML:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – murgatroid99

+0

刚刚阅读张贴之前,但对我来说,这是没用的,可悲的是。 – holographix

+0

哪部分没用?告诉你它不工作的部分或者告诉你使用HTML解析器的部分? – murgatroid99

回答

1

如果线条改变必须是<ul></ul>之间,那么你可以尝试像下面sed命令:

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

在某种意义上这可不是用正则表达式,我指定一个地址范围。 虽然我同意这些评论,但您确实需要小心使用这些HTML工具。开始时,您不想依赖空格或标签如何坐在线上。

此外,也许你可以告诉我们你正在使用什么语言(如果它很重要)。

+0

我知道在正则表达式上建立系统的风险,但我需要将xmls转换为sql语句,并考虑所有我需要计算的模式,以及为完成工作所需的一点时间,这似乎成为唯一可行的选择。无论如何,它就像一个魅力!非常感谢 :) – holographix