我对正则表达式不是很好,但在Textmate中,我试图清除XML文件中的一些多行,看起来像
<comments>
<sub_node>....
....
</comments>
我正在使用正则表达式查找/替换
<comments>(?m:.*)</comments>
上面有多次出现,但是如果我做了一个查找,它会找到第一个,然后选择中间的所有内容,包括外部节点,直到文件中的最后一个。
如果我从最后一行找到前一个(向后),它会正确捕获一个块。我不确定我在这里做错了什么,如果有人甚至可以建议一种更有效的方法。
感谢。
答案 0 :(得分:2)
您需要使用非贪婪的限定符。我对Textmate一无所知,所以我不知道它是否支持它们。如果没有,您可以搜索<comments>
,然后搜索任意数量的</comments>
后跟<comments>
的内容。 (这将是更具体的帮助,但你发布的例子不熟悉,必须是一些Textmate的怪异。)
答案 1 :(得分:0)
听起来对我来说是完全正常的行为。你只需要使用一个不情愿的量词,这意味着添加一个?
,如下所示:
<comments>(?m:.*?)</comments>
这里唯一奇怪的是m
(对于“多行”)修饰符,它允许.
元字符匹配换行符。大多数正则表达式都称为“单行”或“点匹配全部”模式,并使用s
来指定它。这些风格也倾向于支持m
/“多线”模式,这会改变^
和$
anchors的行为。在TextMate中,这是默认模式,无法更改。