为什么没有特殊字符的正则表达式匹配更长的字符串?

时间:2009-02-06 18:00:18

标签: c# regex

我正在使用此方法尝试查找匹配项,例如:

Regex.Match("A2-TS-OIL", "TS-OIL", RegexOptions.IgnoreCase).Success;

我得到了一个真实的结果。我很迷惑。我认为这应该返回false,因为模式中没有特殊字符。如果我使用".+TS-OIL",则应返回true(任何.+超过1)。我该怎么做才能得到我需要的东西?

4 个答案:

答案 0 :(得分:11)

正则表达式匹配不必从输入开始处开始。你可能想要:

^TS-OIL

如果你想在开始时只匹配。或者:

^TS-OIL$

防止它与TS-OIL-123匹配。

^匹配输入的开头,$匹配结束。

我相信有些地方会自动添加^$(例如网络验证控件),但它们是个例外。

不过,你可以使用:

Regex.IsMatch(...)

在这种情况下可以节省一些按键。

答案 1 :(得分:5)

如果您只想在测试字符串以正则表达式开头时匹配,那么您需要指示:

Regex.Match("A2-TS-OIL", "^TS-OIL", RegexOptions.IgnoreCase).Success;

^表示匹配必须从字符串的开头开始。

答案 2 :(得分:1)

在表达式字符串的开头和结尾有一个隐含的。*。你需要使用^和$代表字符串的开头和结尾来覆盖它。

答案 3 :(得分:0)

TS-OIL是A2-TS-OIL中的子串。所以,它会产生一个匹配。你有最简单的匹配 - 文字子串。如果你想要TS-OIL不匹配,你也可以尝试(?!^ A2 - )(TS-OIL),假设你不希望它以A2-开头,但是可能还需要其他东西。