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

时间:2012-04-17 17:59:02

标签: regex

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

匹配的表达式
type ([a-z])\b

但不匹配,例如

type a-1

重新措辞:我想要一个等价的边界运算符\ b而不是使用单词character class [A-Za-z0-9_],而是使用扩展类:[A-Za-z0-9_-]

2 个答案:

答案 0 :(得分:24)

你可以使用前瞻,最短的是使用否定前瞻:

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

(?![\w-])表示“如果下一个字符位于\w-”,则“匹配失败。”

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

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

如果字符类(?=[^\w-]|$)中的下一个字符不是,则可以将[\w-]视为“仅匹配”,或者这是字符串的结尾“。

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

答案 1 :(得分:10)

我有一个非常类似的问题,除了我不想考虑' *'作为边界人物。这就是我的所作所为:

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

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

*word
wo*rd
word*