为什么下面的正则表达式不适用于vim? (具体来说,正则表达式中的?)

时间:2016-07-06 14:54:51

标签: regex vim

[0-9]* (-)?[0-9]* q

这个正则表达式似乎不适用于vim下面的文本

  

34778965 -1 q这里的一些文字

[解决]

谢谢!我意识到这一切都必须逃脱。感觉不一致的是一些需要像\一样被逃脱的?但有些不是,比如*或$。 vimregex.com帮忙。

2 个答案:

答案 0 :(得分:3)

您可以使用\d表示vim正则表达式中的数字。

您的文字的好模式将是

       \d\+ -\? \d\+ q

通常,vim假定字符为字面字符。所以,如果你给\d+,它将被理解为任何数字后跟一个加号。因此,您必须在模式中转义此类正则表达式特定字符。

答案 1 :(得分:1)

在Vim中,您需要转义一些常见的正则表达式特殊字符,以便它们充当特殊运算符。例如。 (-)组必须以\(-\)非神奇模式编写。在非常神奇的模式下,您的模式将按原样运行 - :%s/\v[0-9]* (-)?[0-9]* q/replace/g

在您的情况下,您根本不需要分组,因为您在括号内量化了一个连字符,因此可以删除它们:

[0-9]* -\? [0-9]* q