我需要一个匹配以单词边界结尾的表达式的正则表达式,但它不将连字符视为边界。即获取匹配的所有表达式
type ([a-z])\b
但不匹配,例如
type a-1
换种说法:我想要一个等效的单词边界运算符 \b ,而不是使用单词 character class [A-Za-z0-9_]
,而是使用扩展类:[A-Za-z0-9_-]
我需要一个匹配以单词边界结尾的表达式的正则表达式,但它不将连字符视为边界。即获取匹配的所有表达式
type ([a-z])\b
但不匹配,例如
type a-1
换种说法:我想要一个等效的单词边界运算符 \b ,而不是使用单词 character class [A-Za-z0-9_]
,而是使用扩展类:[A-Za-z0-9_-]
您可以为此使用前瞻,最短的方法是使用负前瞻:
type ([a-z])(?![\w-])
(?![\w-])
意味着“如果下一个字符在\w
或是”,则匹配失败-
。
这是一个使用正常前瞻的选项:
type ([a-z])(?=[^\w-]|$)
您可以阅读(?=[^\w-]|$)
为“仅当下一个字符不在字符类中时才匹配[\w-]
,或者这是字符串的结尾”。
我有一个非常相似的问题,只是我不想将“*”视为边界字符。这是我所做的:
\b(?<!\*)([^\s\*]+)\b(?!*)
基本上,如果您处于单词边界,请回看一个字符,如果前一个字符是“*”,则不匹配。如果你在中间,不要在空格或星号上匹配。如果您在末尾,请确保末尾不是星号。在你的情况下,我认为你可以使用 \w 而不是 \s。对我来说,这适用于以下情况:
*word
wo*rd
word*