Regex \w不';在vim搜索替换中不起作用,但a-zA-Z起作用? 太长,读不下去了
Regex \w不';在vim搜索替换中不起作用,但a-zA-Z起作用? 太长,读不下去了,regex,search,vim,replace,Regex,Search,Vim,Replace,[a-zA-Z\.-]在Vim regex search replace中工作,但[\w\.-]不工作 我正在搜索的文本: 期望输出 我的问题 为什么这样做有效: :%s/\v^\d+\s+([a-zA-z\.-]+)\s+.*/\1/g 但这并不是: :%s/\v^\d+\s+([\w\.-]+)\s+.*/\1/g E486:找不到模式:%s/\v^\d+\s+([\w\.-]+)\s+.*/\1/g 两者之间的唯一区别是方括号内的a-zA-Zvs\w。但是\w是否等于a-zA-Z(加上
[a-zA-Z\.-]
在Vim regex search replace中工作,但[\w\.-]
不工作
我正在搜索的文本:
期望输出
我的问题
为什么这样做有效:
:%s/\v^\d+\s+([a-zA-z\.-]+)\s+.*/\1/g
但这并不是:
:%s/\v^\d+\s+([\w\.-]+)\s+.*/\1/g
E486:找不到模式:%s/\v^\d+\s+([\w\.-]+)\s+.*/\1/g
两者之间的唯一区别是方括号内的a-zA-Z
vs\w
。但是\w
是否等于a-zA-Z
(加上本例文本中未包含的一些其他非空白字符)
我使用默认的vim。未经修改。Ubuntu随附的一切
非vim平台
当我尝试使用atom文本编辑器而不是vim时,这两个表达式都可以工作
搜索:^\d++\s+([a-zA-z\.-]+)\s++.
替换:$1
当我尝试使用这两种表达时,效果都很好。(尽管我必须添加多行标记)
我试过的其他事情
我的理解是\v
是避免逃离地狱的必要条件。我试过不用它:
:%s/^\d\+\s\+\([a-zA-Z\.-]\+\)\s\+.*/\1/g
工作
不起作用。(“未找到模式”)
我还尝试添加了m
标志(因此结尾是/gm
),但没有成功
E488:尾随字符
我也尝试过不使用^
:%s/\d\+\s\+\([\w\.-]\+\)\s\+.*/\1/g
E486:找不到模式:\d\+\s\+\([\w\.-]\+\)\s\+.*
我还尝试使用\\w
而不是\w
:%s/\d\+\s\+\([\\w\.-]\+\)\s\+.*/\1/g
E486:找不到模式:\d\+\s\+\([\\w\.-]\+\)\s\+.*
我还尝试使用\[\]
而不是[]
:%s/\d\+\s\+\(\[\\w\.-\]\+\)\s\+.*/\1/g
E486:找不到模式:\d\+\s\+\(\[\\w\.-\]\+\)\s\+.*
[a-zA-Z\.-]
在Vim regex search replace中工作,但[\w\.-]
不工作
[a-zA-Z\.-]
是包含以下内容的字符集合:
- 从
到a
的每个字符z
- 从
到A
的每个字符Z
- 字符
- 和字符
-
:help/collection
很遗憾没有明确说明这一点,但是像\w
这样的字符类被解释为“转义w
”,因此“普通w
”,所以[\w\.-]
实际上只是[w\.-]
,这不是您想要的:
- 字符
w
- 字符
- 和字符
-
[\w]
?我已经试过了[\\w]
。在这种情况下,我可以执行a-zA-Z
,但我想知道,在键入完整的系列是超长的情况下(例如\S
),您为什么要执行[\w]
或[\S]
?如果它起作用,它将严格等同于\w
和\S
,因此没有任何好处。作为替代,请参阅:help[:alnum:
和相关的字符类表达式。对不起,当我说[\w]
时,我指的是有\w
和其他内容的组。(例如[\w\.]
)<代码>[:alnum::\.-]确实有效。谢谢然而,如果我需要学习一组定制的长魔术字符串,因为Vim不能理解规范正则表达式,我不认为使用Vim有什么意义。我要回到Nano,你可以自由使用任何你想要的工具,也可以不费吹灰之力去学习它。
:%s/\d\+\s\+\([\w\.-]\+\)\s\+.*/\1/g
:%s/\d\+\s\+\([\\w\.-]\+\)\s\+.*/\1/g
:%s/\d\+\s\+\(\[\\w\.-\]\+\)\s\+.*/\1/g