我需要一个匹配以字边界结尾的表达式的正则表达式,但不将连字符视为边界。 即获取所有与
匹配的表达式type ([a-z])\b
但不匹配,例如
type a-1
重新措辞:我想要一个等价的边界运算符\ b而不是使用单词character class [A-Za-z0-9_]
,而是使用扩展类:[A-Za-z0-9_-]
答案 0 :(得分:24)
你可以使用前瞻,最短的是使用否定前瞻:
type ([a-z])(?![\w-])
(?![\w-])
表示“如果下一个字符位于\w
或-
”,则“匹配失败。”
这是一个使用正常前瞻的选项:
type ([a-z])(?=[^\w-]|$)
如果字符类(?=[^\w-]|$)
中的下一个字符不是,则可以将[\w-]
视为“仅匹配”,或者这是字符串的结尾“。
答案 1 :(得分:10)
我有一个非常类似的问题,除了我不想考虑' *'作为边界人物。这就是我的所作所为:
\b(?<!\*)([^\s\*]+)\b(?!*)
基本上,如果您处于单词边界,请回顾一个字符,如果之前的字符是&#39; *&#39;则不要匹配。如果您处于中间位置,请不要在空格或星号上进行匹配。如果你最后,请确保结尾不是星号。在你的情况下,我认为你可以使用\ w而不是\ s。对我来说,这适用于这些情况:
*word
wo*rd
word*