0

我不太擅长正则表达式,但在 Textmate 中,我试图清除 XML 文件中的一些多行,看起来像

<comments>
    <sub_node>....
....
</comments>

我在用正则表达式查找/替换时使用它,

<comments>(?m:.*)</comments>

上述情况多次出现,但如果我进行查找,它会找到第一个,然后选择包括外部节点在内的所有内容,直到文件中的最后一个。

如果我从最后一行查找上一个(向后)它会正确捕获一个块。我不确定我在这里做错了什么,是否有人甚至可以提出一种更有效的方法来做到这一点。

谢谢。

4

2 回答 2

2

您需要使用非贪婪限定符。我对Textmate一无所知,所以我不知道它是否支持它们。如果没有,您可以搜索<comments>后跟任意数量的没有</comments>后跟的东西<comments>。(这将是更具体的帮助,但是您发布的示例不熟悉,并且必须是一些 Textmate 怪异。)

于 2011-04-25T02:12:36.730 回答
0

听起来对我来说是完全正常的行为。您只需要使用不情愿的量词,这意味着添加 a ?,如下所示:

<comments>(?m:.*?)</comments>

这里唯一奇怪的是m(for "multiline") 修饰符,它允许.元字符匹配换行符。大多数正则表达式风格称其为“单行”或“点匹配所有”模式,并用于s指定它。这些风格也倾向于支持m/"multiline" 模式,这会改变^$ anchors的行为。在 TextMate 中,这是默认模式,无法更改。

于 2011-04-25T04:43:07.977 回答