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

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

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

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

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

 ^TS-OIL 

如果你只想在开始时匹配。 要么:

 ^TS-OIL$ 

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

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

我相信有一些地方可以自动添加^$ (比如webvalidation控件),但它们是例外。

顺便说一下,你可以用:

 Regex.IsMatch(...) 

在这种情况下,以节省一些击键。

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

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

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

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

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