在Vim中,字符类\s与任何空白字符匹配。当我在组中使用这些特殊字符时[\s\w]它不匹配任何单个空格或单词字符,它匹配sw

如何在组内使用字符类?

评论

与某些正则表达式引擎的实现不同,Vim似乎不支持该表示法。但是[[:space:] [:alnum:] _]可以用于近似\ s和\ w的集合。

#1 楼

这不是一个组,而是一个范围,在Vim中,您不能使用字符类(尽管在其他正则表达式实现中(例如在python中)也可以使用)。您必须改为使用替代:

/\(\w\|\s\)


或:

/\v(\s|\w)


(或者Peter Lewerin提出的解决方案)。

评论


仅仅因为可以在字符类中构造无效范围并不意味着在字符类中不能使用\ s之类的东西。 Vim的正则表达式实现恰好做出了这种选择,但是其他实现允许您使用[\ s]。

–詹姆斯
15年7月31日在16:46

@VanLaser如果您使用此信息编辑答案([\ s]在其他正则表达式实现中是可能的,但在vim中不是),我会接受您的答案!

– John H. K.
15年8月2日在5:23

(好的,添加)

– VanLaser
15年8月2日,14:53

#2 楼

与某些正则表达式引擎的实现不同,Vim似乎在集合中不支持该表示法([\s\w])。但是,可以使用POSIX字符类表达式。



[:blank:]\s相同。

[:space:]\s匹配的空白字符数量更多,并且似乎等同于\_s

[:alnum:]近似于\w,但与下划线(_)不匹配。

因此所需的集合可以写为[[:blank:][:alnum:]_][[:space:][:alnum:]_]

/>我尚未通过测试进行验证,但已在:h regexp:h /character-classes:h /collection中进行了记录。

可移植性注意:在其他正则表达式引擎中,\s通常与[:space:](或\_s)相同。在Vim中。