正则表达式单词边界(不包括连字符)



我需要一个正则表达式,它匹配以单词边界结尾的表达式,但不将连字符视为边界。即获取所有表达式匹配

type ([a-z])b

但不匹配,例如

type a-1

改写一下:我想要一个等效的单词边界运算符 \b,它不使用单词字符类 [A-Za-z0-9_] ,而是使用扩展类:[A-Za-z0-9_-]

您可以使用前瞻,最短的是使用负前瞻:

type ([a-z])(?![w-])

(?![w-])的意思是"如果下一个角色在w或是一个-,则匹配失败"。

下面是一个使用正常前瞻的选项:

type ([a-z])(?=[^w-]|$)

您可以将(?=[^w-]|$)读作"仅当下一个字符不在字符类[w-]中时才匹配,或者这是字符串的末尾"。

看到它工作:http://www.rubular.com/r/NHYhv72znm

我有一个非常相似的问题,只是我不想将"*"视为边界字符。 这是我所做的:

b(?<!*)([^s*]+)b(?!*)

基本上,如果您处于单词边界,请回头查看一个字符,并且如果前一个字符是"*"则不匹配。 如果您位于中间,请不要在空格或星号上匹配。 如果您在末尾,请确保结尾不是星号。 在您的情况下,我认为您可以使用 \w 而不是 \s。 对我来说,这在以下情况下有效:

*word
wo*rd
word*

最新更新