为什么没有特殊字符的正则表达式匹配更长的字符串?
我在使用此方法尝试查找匹配项,例如:
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-开头,但可能还需要其它东西。