Regex.Match给出意想不到的结果

时间:2015-05-07 08:37:19

标签: c# asp.net regex

我一直在使用Regex.Match函数来匹配使用以下代码的两个字符串

bool contains = Regex.Match(highlightedText, searchText, RegexOptions.IgnoreCase).Success;

此处此代码工作正常,但如果我将highlightedText设置为“Rajeev”并将searchText设置为“。”即点。它仍然会返回true

如果我在任何字符串中搜索.,它会向我true或不highlightedText包含'{'}。或不。

为什么它会给我错误的价值?

4 个答案:

答案 0 :(得分:2)

正则表达式"."是任何符号。你的字符串包含任何符号?是。 使用@"\."(转义点)查找字符串包含点。

对于字符串中的简单搜索子字符串,请使用string.IndexOf,如下所示:

string text = "some kind of text";

Console.WriteLine("'{0}' contains '{1}'? {2}", text, "some", text.IndexOf("some", StringComparison.InvariantCultureIgnoreCase) >= 0);
Console.WriteLine("'{0}' contains '{1}'? {2}", text, "pleasure", text.IndexOf("pleasure", StringComparison.InvariantCultureIgnoreCase) >= 0);

结果:

'some kind of text' contains 'some'? True
'some kind of text' contains 'pleasure'? False

答案 1 :(得分:1)

dot匹配每个字符。要匹配点本身,请使用"\."

答案 2 :(得分:1)

您的searchText是实际正则表达式,其中包含为解释保留的某些字符。这些通常被称为元字符,可以包括:

  • 反斜杠\
  • 插入符^
  • 美元符号$
  • 句点或点.
  • 垂直条或竖线符号|
  • 问号?
  • 星号或星号*
  • 加号+
  • 左括号(
  • 右括号)
  • 开方括号[
  • 开口大括号{

    如果您想在搜索中使用其中任何一个作为文字字符,那么您需要通过添加反斜杠前缀来逃避它们...例如\.

    在您的情况下,.元字符用作通配符来表示任何单个字符。

答案 3 :(得分:1)

基本上是正则表达式语法,

Regex.Match(STRING, PATTERN, RegexOptions.IgnoreCase)

因此,您的searchText参数将被视为正则表达式模式,这就是您将true作为回报的原因。

" ."匹配除换行符之外的任何单个字符

其他行为列表 http://www.mikesdotnetting.com/article/46/c-regular-expressions-cheat-sheet

Regex.Match(highlightedText, @"\.", RegexOptions.IgnoreCase).Success

这适用于您的情况。