【发布时间】:2016-06-16 14:32:57
【问题描述】:
给定这样的字符串:
aWordToRemove;
把它变成这样:
TEST;
如果我运行命令 :s/[a-zA-Z]*/TEST/ 那么它什么都不匹配。
但是,如果我运行:s/[a-zA-Z]\w*/TEST/,那么它将用TEST 替换aWordToRemove,并保持前导空格和尾随分号不变。
如果第一个正则表达式有前导空格,为什么它找不到单词?
为什么将\w 放在* 之前会起作用?
编辑:
Vim 似乎很挑剔。以下是一些有效和无效的正则表达式。
工作正则表达式
s/[a-zA-Z]\w*/TEST/
s/[a-zA-Z][a-zA-Z]*/TEST/
s/[a-zA-Z]\+/TEST/
不工作的正则表达式
s/[a-zA-Z]*/TEST/
s/[a-zA-Z]+/TEST/
【问题讨论】:
-
因为你需要一个全局修饰符。或者更好的是
+而不是*。否则,模式在开始时匹配。 -
你需要的模式是
s/[a-zA-Z]\+/TEST/ -
你知道为什么需要反斜杠吗?
-
这只是spec 的一部分。创作者显然认为
+应该是字符,\+应该是量词。