也许我在这里做错了但是当我尝试将字符串“放射检查眼睛检测异物”与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);
}
提前致谢!
答案 0 :(得分:3)
这是匹配的,因为你那里有一个星号。
星号表示:
匹配前面的字符零次或多次
所以它根本不匹配\b
,但仍然满足上述条件。
删除它,它不再匹配:
string regex = "\\b" + "ct" + "\\b";
至于为什么它与Regexr不匹配,我不知道,但对我来说它实际上匹配reFiddle
答案 1 :(得分:1)
C#可能会将\b*
解释为0个或更多字边界。
由于这是一个奇怪的定义,也许regexr不允许使用contruct并将其视为\b
。例如,如果它使用不同的正则表达式后端和C#的翻译,则可能就是这种情况。
你确定你并不是指\b.*ct\b
哪个是单词边界,后跟任意数量的字符后跟ct和另一个单词边界?