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

C# 为什么这个没有特殊字符的正则表达式匹配更长的字符串?,c#,regex,C#,Regex,我正在使用此方法尝试查找匹配项,例如: Regex.Match("A2-TS-OIL", "TS-OIL", RegexOptions.IgnoreCase).Success; 我得到了一个真实的结果。我很困惑。我认为这应该返回false,因为模式中没有特殊字符。如果我使用了“+TS-OIL”,则应返回true(对于任何一个,对于超过1个+)。我应该怎么做才能得到我所需要的?正则表达式匹配不必从输入开始。您可能需要: ^TS-OIL 如果您只想在开始时匹配。或: ^TS-OIL$ 防止其与

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

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

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

正则表达式匹配不必从输入开始。您可能需要:

^TS-OIL
如果您只想在开始时匹配。或:

^TS-OIL$
防止其与TS-OIL-123匹配

^
匹配输入的开头,$匹配结尾

我相信在某些地方,
^
$
会自动添加(如web验证控件),但它们是例外

顺便说一句,你可以使用:

Regex.IsMatch(...)

在本例中,保存一些击键。

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

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

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

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

TS-OIL是A2-TS-OIL中的子字符串。因此,它将生成一个匹配项。您有可能的最简单匹配-文字子字符串。如果您希望TS-OIL不匹配,您也可以尝试(?^A2-)(TS-OIL),假设您不希望它以A2-开头,但可能需要其他东西。

不太合适。“包含TS-OIL且不以A2开头”的正则表达式将是“^(?!A2-).*TS-OIL”或“(?如果您不打算使用匹配值,则可能只希望使用.indexOf而不是正则表达式。