正则表达式字边界不包括连字符

eya*_*ler 27 regex

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

type ([a-z])\b
Run Code Online (Sandbox Code Playgroud)

但不匹配,例如

type a-1
Run Code Online (Sandbox Code Playgroud)

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

And*_*ark 26

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

type ([a-z])(?![\w-])
Run Code Online (Sandbox Code Playgroud)

(?![\w-])将意味着"如果下一个角色在\w或是",则"未通过比赛-".

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

type ([a-z])(?=[^\w-]|$)
Run Code Online (Sandbox Code Playgroud)

您可以将其读(?=[^\w-]|$)作"只有在下一个字符不在字符类中时才匹配[\w-],或者这是字符串的结尾".

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


小智 12

我有一个非常相似的问题,除了我不想将'*'视为边界字符.这是我做的:

\b(?<!\*)([^\s\*]+)\b(?!*)
Run Code Online (Sandbox Code Playgroud)

基本上,如果你处于单词边界,请回顾一个字符,如果前一个字符是'*'则不匹配.如果你在中间,请不要在空格或星号上匹配.如果你在最后,请确保结尾不是星号.在你的情况下,我认为你可以使用\ w而不是\ s.对我来说,这适用于以下情况:

*word
wo*rd
word*
Run Code Online (Sandbox Code Playgroud)

  • 您的正则表达式语法无效 (3认同)