【问题标题】:Regex issue - fine backwards and not forwards Textmate正则表达式问题 - 向后好,而不是向前 Textmate
【发布时间】:2011-04-25 01:54:39
【问题描述】:

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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: regex textmate oniguruma


    【解决方案1】:

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

    【讨论】:

    • 是的,感谢您提供的信息,我想我必须做得更具体。
    【解决方案2】:

    对我来说,这听起来像是完全正常的行为。你只需要使用一个勉强的量词,这意味着添加一个?,就像这样:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 2012-04-18
      • 2016-02-20
      相关资源
      最近更新 更多