C#正则表达式匹配但不是Regexr.com

时间:2014-01-17 17:23:27

标签: c# regex

也许我在这里做错了但是当我尝试将字符串“放射检查眼睛检测异物”与regexr.com上的正则表达式“\ b * ct \ b”匹配时,我觉得很奇怪然后我找不到匹配但是当我尝试使用C#程序做同样的事情时,它匹配。 C#代码如下。我在做/检查错误吗?

string desc = "radiologic examination eye detect foreign body";
string regex = "\\b" + "*ct" + "\\b";
if (Regex.IsMatch(desc, regex))
{
    String x = Regex.Replace(desc, regex, " " + "ct" + " ").Trim();
    Console.WriteLine(x);
}

提前致谢!

2 个答案:

答案 0 :(得分:3)

这是匹配的,因为你那里有一个星号。

星号表示:

  

匹配前面的字符零次或多次

所以它根本不匹配\b,但仍然满足上述条件。

删除它,它不再匹配:

string regex = "\\b" + "ct" + "\\b";

至于为什么它与Regexr不匹配,我不知道,但对我来说它实际上匹配reFiddle

答案 1 :(得分:1)

C#可能会将\b*解释为0个或更多字边界。

由于这是一个奇怪的定义,也许regexr不允许使用contruct并将其视为\b。例如,如果它使用不同的正则表达式后端和C#的翻译,则可能就是这种情况。

你确定你并不是指\b.*ct\b哪个是单词边界,后跟任意数量的字符后跟ct和另一个单词边界?