正则表达式中自定义单词边界

6

我正在尝试使用正则表达式匹配单词,但是不幸的是,单词边界字符(\b)没有包含我想要的足够多的字符,因此我希望添加更多的字符(在这种情况下是"+"符号)。

以下是我以前使用的代码(使用C#语言,但与本问题无关):

string expression = Regex.Escape(word);
Regex regExp = new Regex(@"\b" + expression + @"\b", RegexOptions.IgnoreCase);

这个正则表达式没有匹配上"C++",我感到十分失望。因此,我尝试在字符类中使用\w字符以及加号+的方式:
string expression = Regex.Escape(word);
Regex regExp = new Regex(@"(?![\w\+])" + expression + @"(?![\w\+])", RegexOptions.IgnoreCase);

但现在,没有任何匹配项......我是否遗漏了什么?

是的,抱歉,我刚刚编辑了它,包括expression的声明。我的错。word是一个字符串。在word为“C++”的情况下,经过转义后,表达式变成:“C\+\+”。 - SylvainB
应该是"C\\+\\+"而不是"{C\\+\\+}"吧?如果我错了,请见谅,我是C#的新手。 - Naveed S
是的,对不起,我又编辑了一下 :D 我在调试时只是看错了元素。 - SylvainB
1个回答

11

问题在于您首先使用了负向前瞻,而应该使用负向后顾。尝试使用:

(不需要转义字符类中的+)

@"(?<![\w+])" + expression + @"(?![\w+])"

谢谢,解决了!我有一种感觉,第一条语句应该与第二条不同,但是很难在搜索引擎中表达这样的问题。 - SylvainB
我浏览了一会儿,但从未遇到关于“?”字符的部分...而且很遗憾,你的“\Q”字符在正则表达式中无法识别...至少在我的语言中是这样。 - SylvainB
(?=...)和相关内容属于“环视”部分。我曾以为.NET支持\Q\E,但显然不是这样...太糟糕了 :/ - fge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接