2013-02-08 78 views
0

早些时候,我尝试了一些正则表达式来修剪<!-- and -->(包括这些标记以及)之间的字符串,但没有成功。正则表达式 - 删除<!-- and -->之间的字符

你能告诉我一些关于这个问题的信息吗?

+3

@Johnsyweb这只是明显错误的。 HTML中的评论不能包含其他评论,所以你不会遇到模棱两可的标记问题 - 评论只是文本以“ - >”序列结尾(评论中的任何地方的序列将结束它,你不能逃避它) – MBO

+0

@MBO:在评论中,“ - >”明确地表示评论的结尾。但是,“<! - ”不一定是评论的开始。这可能会导致可利用的表面。例如如果此后的过滤完成,那么可能会剥离事件属性的东西可能会很容易受到阻碍:'-->" onmouseover="alert('uh oh')">Ooh! Move over me!'。即使使用正则表达式来解析*注释*可能是一个坏主意。 –

+0

@ChrisMorgan好点,我没有考虑标签内部的评论开始......所以这仍然是一个难题。 – MBO

回答

2

正则表达式匹配HTML注释

/<!--.*?-->/s 

解释演示在这里:http://regex101.com/r/qZ4uP9

+0

我冒昧地添加's'修饰符:默认情况下'.'与大多数正则表达式实现中的换行符都不匹配(使用's')。 –

+0

@BartKiers:thanx,赞赏 –

2

以匹配文本看起来像XML注释(非常接近HTML注释规则的评论规则)你想要的东西是这样的:

<!--.*?--> 

假设你的语言的RE引擎支持非贪婪的量词。去除需要在整个输入文本中重复匹配,并替换空字符串;其语法取决于所讨论的语言。

没有非贪婪量词,事情变得更加复杂(NB,这是稍微偏离了HTML注释,但你真的不想学习差的细节):

<!--([^-]|-[^-])*--> 

注意--是不应该在XML注释中遇到的,除非它后面跟着>;这是XML评论的本质的一部分...

相关问题