2016-06-10 63 views
-2

我想创建以下与字符串一个简单的正则表达式的问题

<tr> 
     <td colspan=2> 
     <p><b> 
     CITY Head: 
     <span > 
     <span >##CITY##</span> 
     <o:p></o:p> 
     </span> 
     </b> 
     </p> 
     </td> 
     <td colspan=1> 

我想找到有城头上在它整个TD块正则表达式。我可以使用以下正则表达式。

<td(.*)[\s](.*)[\s]+CITY Head+(.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s]+<\/td> 

基本上我不得不写(.*)[\s]为上方和下方的CITY头的所有行。但在不同的情况下,这可能会有所不同。

因此,我正在寻找一种将所有(.*)[\s]合并为独立于行数的一般方法。

+2

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – HRgiger

+1

但是,正如bobince所说:*“那么继续,解析HTML与正则表达式,如果你必须的,它只是破碎的代码,而不是生命和死亡。“* –

+0

是的,遵循bobince的建议,最终可以研究脾气暴躁的代币。然后,在性能方面存在问题,继续研究展开循环技术。最后,只要意识到一个DOM解析器就更容易了。 –

回答

0

[\s\S]*?将匹配空白(\s)或非空白(\S)的最小可能数(* = 0以上,? = ungreedy)(即任何)字符。

<td((?!<\/?td)[\s\S])*?CITY Head[\s\S]*?<\/td> 

断言(?!<\/?td)确保CITY Head前的部分不跨越多个表格单元格。

但是使用正则表达式不是解析HTML的可靠方法。特别是,如果HTML包含语法错误,则此正则表达式可能会导致错误的结果。

+0

上述正则表达式将采用所有在“CITY Head”之前出现的所有TD。正则表达式的设计必须在CITY Head进入解析之前只有第一个TD。 – Invisible

+0

确实,应该测试过。我添加了一个负面的断言来解决它。这就是为什么我通常回答这些问题的原因:“你不能用正则表达式解析HTML”;) –

+0

完美。非常感谢。 :-) – Invisible