Regex.IsMatch 方法正则表达式在输入字符串中是否找到匹配项C#

Regex.IsMatch 方法

定义

命名空间:

System.Text.RegularExpressions

程序集:

System.Text.RegularExpressions.dll, System.dll, netstandard.dll

指示正则表达式在输入字符串中是否找到匹配项。

重载

IsMatch(String)

指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中是否找到了匹配项。

IsMatch(String, Int32)

指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中,从该字符串中的指定起始位置开始是否找到了匹配项。

IsMatch(String, String)

指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项。

IsMatch(String, String, RegexOptions)

指示所指定的正则表达式是否使用指定的匹配选项在指定的输入字符串中找到了匹配项。

IsMatch(String, String, RegexOptions, TimeSpan)

指示所指定的正则表达式是否使用指定的匹配选项和超时间隔在指定的输入字符串中找到了匹配项。

IsMatch(String)

指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中是否找到了匹配项。

C#复制

public bool IsMatch (string input);

参数

input

String

要搜索匹配项的字符串。

返回

Boolean

如果正则表达式找到匹配项,则为 true;否则为 false

异常

ArgumentNullException

input 为 null

RegexMatchTimeoutException

发生超时。 有关超时的详细信息,请参阅“备注”部分。

示例

下面的示例演示如何使用 IsMatch(String) 方法来确定字符串是否是有效的部件号。 正则表达式假定部件号具有特定的格式,该格式包含三组由连字符分隔的字符。 包含四个字符的第一个集必须包含一个字母数字字符,后跟两个数字字符后跟一个字母数字字符。 由三个字符组成的第二个集必须为数字。 第三个集由四个字符组成,必须有三个数字字符后跟一个字母数字字符。

C#复制

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string[] partNumbers= { "1298-673-4192", "A08Z-931-468A", 
                              "_A90-123-129X", "12345-KKA-1230", 
                              "0919-2893-1256" };
      Regex rgx = new Regex(@"^[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]$");
      foreach (string partNumber in partNumbers)
         Console.WriteLine("{0} {1} a valid part number.", 
                           partNumber, 
                           rgx.IsMatch(partNumber) ? "is" : "is not");
   }
}
// The example displays the following output:
//       1298-673-4192 is a valid part number.
//       A08Z-931-468A is a valid part number.
//       _A90-123-129X is not a valid part number.
//       12345-KKA-1230 is not a valid part number.
//       0919-2893-1256 is not a valid part number.

正则表达式模式为:

复制

^[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]$  

下表演示了如何解释正则表达式模式。

模式说明
^从行的开头开始匹配。
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
\d{2}匹配两个数字字符。
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
-匹配连字符。
\d{3}正好匹配三个数字字符。
(-\d{3}){2}查找后跟三个数字字符的连字符,并匹配此模式的两个匹配项。
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
$在行的末尾结束匹配。

注解

IsMatch 方法通常用于验证字符串或确保字符串符合特定模式,而不检索该字符串进行后续操作。 如果要确定一个或多个字符串是否与正则表达式模式匹配,然后检索它们以供后续操作,请调用 Match 或 Matches 方法。

如果匹配操作的执行时间超过了 Regex.Regex(String, RegexOptions, TimeSpan) 构造函数指定的超时间隔,则会引发 RegexMatchTimeoutException 异常。 如果在调用构造函数时未设置超时间隔,则当操作超过为创建 Regex 对象的应用程序域建立的任何超时值时,将引发异常。 如果在 Regex 构造函数调用或应用程序域的属性中没有定义超时值,或者如果 Regex.InfiniteMatchTimeout超时值,则不会引发异常。

另请参阅

IsMatch(String, Int32)

指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中,从该字符串中的指定起始位置开始是否找到了匹配项。

C#复制

public bool IsMatch (string input, int startat);

参数

input

String

要搜索匹配项的字符串。

startat

Int32

开始搜索的字符位置。

返回

Boolean

如果正则表达式找到匹配项,则为 true;否则为 false

异常

ArgumentNullException

input 为 null

ArgumentOutOfRangeException

startat 小于零或大于 input 的长度。

RegexMatchTimeoutException

发生超时。 有关超时的详细信息,请参阅“备注”部分。

示例

下面的示例演示如何使用 IsMatch(String, Int32) 方法来确定字符串是否是有效的部件号。它搜索跟在冒号(:)字符串中的字符。 IndexOf(Char) 方法用于确定冒号字符的位置,然后将其传递给 IsMatch(String, Int32) 方法。 正则表达式假定部件号具有特定的格式,该格式包含三组由连字符分隔的字符。 包含四个字符的第一个集必须包含一个字母数字字符,后跟两个数字字符后跟一个字母数字字符。 由三个字符组成的第二个集必须为数字。 第三个集由四个字符组成,必须有三个数字字符后跟一个字母数字字符。

C#复制

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string[] partNumbers= { "Part Number: 1298-673-4192", "Part No: A08Z-931-468A", 
                              "_A90-123-129X", "123K-000-1230", 
                              "SKU: 0919-2893-1256" };
      Regex rgx = new Regex(@"[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]$");
      foreach (string partNumber in partNumbers)
      {
         int start = partNumber.IndexOf(':');
         if (start >= 0)
         {
            Console.WriteLine("{0} {1} a valid part number.", 
                              partNumber, 
                              rgx.IsMatch(partNumber, start) ? "is" : "is not");
         }
         else
         {
            Console.WriteLine("Cannot find starting position in {0}.", partNumber);
         }
      }
   }
}
// The example displays the following output:
//       Part Number: 1298-673-4192 is a valid part number.
//       Part No: A08Z-931-468A is a valid part number.
//       Cannot find starting position in _A90-123-129X.
//       Cannot find starting position in 123K-000-1230.
//       SKU: 0919-2893-1256 is not a valid part number.

正则表达式模式为:

复制

[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]$  

下表演示了如何解释正则表达式模式。

模式说明
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
\d{2}匹配两个数字字符。
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
-匹配连字符。
\d{3}正好匹配三个数字字符。
(-\d{3}){2}查找后跟三个数字字符的连字符,并匹配此模式的两个匹配项。
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
$在行的末尾结束匹配。

注解

IsMatch 方法通常用于验证字符串或确保字符串符合特定模式,而不检索该字符串进行后续操作。 如果要确定一个或多个字符串是否与正则表达式模式匹配,然后检索它们以供后续操作,请调用 Match 或 Matches 方法。

如果匹配操作的执行时间超过了 Regex.Regex(String, RegexOptions, TimeSpan) 构造函数指定的超时间隔,则会引发 RegexMatchTimeoutException 异常。 如果在调用构造函数时未设置超时间隔,则当操作超过为创建 Regex 对象的应用程序域建立的任何超时值时,将引发异常。 如果在 Regex 构造函数调用或应用程序域的属性中没有定义超时值,或者如果 Regex.InfiniteMatchTimeout超时值,则不会引发异常。

另请参阅

IsMatch(String, String)

指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项。

C#复制

public static bool IsMatch (string input, string pattern);

参数

input

String

要搜索匹配项的字符串。

pattern

String

要匹配的正则表达式模式。

返回

Boolean

如果正则表达式找到匹配项,则为 true;否则为 false

异常

ArgumentException

出现正则表达式分析错误。

ArgumentNullException

input 或 pattern 为 null

RegexMatchTimeoutException

发生超时。 有关超时的详细信息,请参阅“备注”部分。

示例

下面的示例演示如何使用 IsMatch(String, String) 方法来确定字符串是否是有效的部件号。正则表达式假定部件号具有特定的格式,该格式包含三组由连字符分隔的字符。 包含四个字符的第一个集必须包含一个字母数字字符,后跟两个数字字符后跟一个字母数字字符。由三个字符组成的第二个集必须为数字。 第三个集由四个字符组成,必须有三个数字字符后跟一个字母数字字符。

C#复制

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string[] partNumbers= { "1298-673-4192", "A08Z-931-468A", 
                              "_A90-123-129X", "12345-KKA-1230", 
                              "0919-2893-1256" };
      string pattern = @"^[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]$";
      foreach (string partNumber in partNumbers)
         Console.WriteLine("{0} {1} a valid part number.", 
                           partNumber, 
                           Regex.IsMatch(partNumber, pattern) ? "is" : "is not");
   }
}
// The example displays the following output:
//       1298-673-4192 is a valid part number.
//       A08Z-931-468A is a valid part number.
//       _A90-123-129X is not a valid part number.
//       12345-KKA-1230 is not a valid part number.
//       0919-2893-1256 is not a valid part number.

正则表达式模式为:

复制

^[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]$  

下表演示了如何解释正则表达式模式。

模式说明
^从行的开头开始匹配。
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
\d{2}匹配两个数字字符。
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
-匹配连字符。
\d{3}正好匹配三个数字字符。
(-\d{3}){2}查找后跟三个数字字符的连字符,并匹配此模式的两个匹配项。
[a-zA-Z0-9]匹配单个字母字符(a 到 z 或 A 到 Z)或数字字符。
$在行的末尾结束匹配。

注解

IsMatch 方法通常用于验证字符串或确保字符串符合特定模式,而不检索该字符串进行后续操作。 如果要确定一个或多个字符串是否与正则表达式模式匹配,然后检索它们以供后续操作,请调用 Match 或 Matches 方法。

静态 IsMatch(String, String) 方法等效于使用 pattern 指定的正则表达式模式构造 Regex对象,并调用 IsMatch(String) 实例方法。 此正则表达式模式将缓存,以便正则表达式引擎进行快速检索。

pattern 参数包含符号描述要匹配的字符串的正则表达式语言元素。 有关正则表达式的详细信息,请参阅.NET Framework 正则表达式正则表达式语言-快速参考

如果匹配操作的执行时间超过为其调用该方法的应用程序域指定的超时间隔,则会引发 RegexMatchTimeoutException 异常。 如果在应用程序域的属性中未定义超时值,或者如果 Regex.InfiniteMatchTimeout超时值,则不会引发异常。

调用方说明

此方法在与调用方法的应用程序域的默认超时值相等的时间间隔后超时。 如果尚未为应用程序域定义超时值,则将使用值 InfiniteMatchTimeout,这会阻止方法超时。 用于验证模式匹配的建议静态方法是 IsMatch(String, String, RegexOptions, TimeSpan),这允许您设置超时间隔。

另请参阅

IsMatch(String, String, RegexOptions)

指示所指定的正则表达式是否使用指定的匹配选项在指定的输入字符串中找到了匹配项。

C#复制

public static bool IsMatch (string input, string pattern, System.Text.RegularExpressions.RegexOptions options);

参数

input

String

要搜索匹配项的字符串。

pattern

String

要匹配的正则表达式模式。

options

RegexOptions

枚举值的一个按位组合,这些枚举值提供匹配选项。

返回

Boolean

如果正则表达式找到匹配项,则为 true;否则为 false

异常

ArgumentException

出现正则表达式分析错误。

ArgumentNullException

input 或 pattern 为 null

ArgumentOutOfRangeException

options 不是有效的 RegexOptions 值。

RegexMatchTimeoutException

发生超时。 有关超时的详细信息,请参阅“备注”部分。

示例

下面的示例演示如何使用 IsMatch(String, String) 方法来确定字符串是否是有效的部件号。正则表达式假定部件号具有特定的格式,该格式包含三组由连字符分隔的字符。 包含四个字符的第一个集必须包含一个字母数字字符,后跟两个数字字符后跟一个字母数字字符。由三个字符组成的第二个集必须为数字。 第三个集由四个字符组成,必须有三个数字字符后跟一个字母数字字符。

C#复制

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string[] partNumbers= { "1298-673-4192", "A08Z-931-468a", 
                              "_A90-123-129X", "12345-KKA-1230", 
                              "0919-2893-1256" };
      string pattern = @"^[A-Z0-9]\d{2}[A-Z0-9](-\d{3}){2}[A-Z0-9]$";
      foreach (string partNumber in partNumbers)
         Console.WriteLine("{0} {1} a valid part number.", 
                           partNumber, 
                           Regex.IsMatch(partNumber, pattern, RegexOptions.IgnoreCase) 
                                         ? "is" : "is not");
   }
}
// The example displays the following output:
//       1298-673-4192 is a valid part number.
//       A08Z-931-468a is a valid part number.
//       _A90-123-129X is not a valid part number.
//       12345-KKA-1230 is not a valid part number.
//       0919-2893-1256 is not a valid part number.

正则表达式模式为:

复制

^[A-Z0-9]\d{2}[A-Z0-9](-\d{3}){2}[A-Z0-9]$  

下表演示了如何解释正则表达式模式。

模式说明
^从字符串开头开始匹配。
[A-Z0-9]匹配从 A 到 Z或任意数字字符的任何单个字母字符。
\d{2}匹配两个数字字符。
[A-Z0-9]匹配从 A 到 Z或任意数字字符的任何单个字母字符。
-匹配连字符。
\d{3}正好匹配三个数字字符。
(-\d{3}){2}查找后跟三个数字字符的连字符,并匹配此模式的两个匹配项。
[A-Z0-9]匹配从 A 到 Z或任意数字字符的任何单个字母字符。
$在字符串的结尾结束匹配。

在将 options 参数设置为 RegexOptions.IgnoreCase 时调用 IsMatch(String, String, RegexOptions) 方法等效于定义以下正则表达式:

复制

[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]  

若要进行比较,请参阅 IsMatch(String, String) 方法的示例。

注解

IsMatch 方法通常用于验证字符串或确保字符串符合特定模式,而不检索该字符串进行后续操作。 如果要确定一个或多个字符串是否与正则表达式模式匹配,然后检索它们以供后续操作,请调用 Match 或 Matches 方法。

静态 IsMatch(String, String, RegexOptions) 方法等效于使用 pattern 指定的正则表达式模式构造 Regex 对象,并使用 options 指定的正则表达式选项并调用 IsMatch(String) 实例方法。 此正则表达式模式将缓存,以便正则表达式引擎进行快速检索。

pattern 参数包含符号描述要匹配的字符串的正则表达式语言元素。 有关正则表达式的详细信息,请参阅.NET Framework 正则表达式正则表达式语言-快速参考

如果匹配操作的执行时间超过为其调用该方法的应用程序域指定的超时间隔,则会引发 RegexMatchTimeoutException 异常。 如果在应用程序域的属性中未定义超时值,或者如果 Regex.InfiniteMatchTimeout超时值,则不会引发异常。

调用方说明

此方法在与调用该方法的应用程序域的默认超时值相等的时间间隔后超时。 如果尚未为应用程序域定义超时值,则将使用值 InfiniteMatchTimeout,这会阻止方法超时。 用于验证模式匹配的建议静态方法是 IsMatch(String, String, RegexOptions, TimeSpan),这允许您设置超时间隔。

另请参阅

IsMatch(String, String, RegexOptions, TimeSpan)

指示所指定的正则表达式是否使用指定的匹配选项和超时间隔在指定的输入字符串中找到了匹配项。

C#复制

public static bool IsMatch (string input, string pattern, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);

参数

input

String

要搜索匹配项的字符串。

pattern

String

要匹配的正则表达式模式。

options

RegexOptions

枚举值的一个按位组合,这些枚举值提供匹配选项。

matchTimeout

TimeSpan

超时间隔;若要指示该方法不应超时,则为 InfiniteMatchTimeout

返回

Boolean

如果正则表达式找到匹配项,则为 true;否则为 false

异常

ArgumentException

出现正则表达式分析错误。

ArgumentNullException

input 或 pattern 为 null

ArgumentOutOfRangeException

options 不是有效的 RegexOptions 值。

-或- matchTimeout 为负、零或大于 24 天左右。

RegexMatchTimeoutException

发生超时。

示例

下面的示例演示如何使用 IsMatch(String, String, RegexOptions, TimeSpan) 方法来确定字符串是否是有效的部件号。 正则表达式假定部件号具有特定的格式,该格式包含三组由连字符分隔的字符。 包含四个字符的第一个集必须包含一个字母数字字符,后跟两个数字字符后跟一个字母数字字符。 由三个字符组成的第二个集必须为数字。 第三个集由四个字符组成,必须有三个数字字符后跟一个字母数字字符。 匹配正则表达式模式应涉及到最小搜索输入字符串,因此该方法将超时间隔设置为500毫秒。

C#复制

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string[] partNumbers= { "1298-673-4192", "A08Z-931-468a", 
                              "_A90-123-129X", "12345-KKA-1230", 
                              "0919-2893-1256" };
      string pattern = @"^[A-Z0-9]\d{2}[A-Z0-9](-\d{3}){2}[A-Z0-9]$";
      foreach (string partNumber in partNumbers)
         try {
            Console.WriteLine("{0} {1} a valid part number.", 
                              partNumber, 
                              Regex.IsMatch(partNumber, pattern, RegexOptions.IgnoreCase) 
                                            ? "is" : "is not", TimeSpan.FromMilliseconds(500));
         }
         catch (RegexMatchTimeoutException e) {
            Console.WriteLine("Timeout after {0} seconds matching {1}.",
                              e.MatchTimeout, e.Input);
         }
   }
}
// The example displays the following output:
//       1298-673-4192 is a valid part number.
//       A08Z-931-468a is a valid part number.
//       _A90-123-129X is not a valid part number.
//       12345-KKA-1230 is not a valid part number.
//       0919-2893-1256 is not a valid part number.

正则表达式模式为:

复制

^[A-Z0-9]\d{2}[A-Z0-9](-\d{3}){2}[A-Z0-9]$  

下表演示了如何解释正则表达式模式。

模式说明
^从字符串开头开始匹配。
[A-Z0-9]匹配从 A 到 Z或任意数字字符的任何单个字母字符。
\d{2}匹配两个数字字符。
[A-Z0-9]匹配从 A 到 Z或任意数字字符的任何单个字母字符。
-匹配连字符。
\d{3}正好匹配三个数字字符。
(-\d{3}){2}查找后跟三个数字字符的连字符,并匹配此模式的两个匹配项。
[A-Z0-9]匹配从 A 到 Z或任意数字字符的任何单个字母字符。
$在字符串的结尾结束匹配。

在将 options 参数设置为 RegexOptions.IgnoreCase 时调用 IsMatch(String, String, RegexOptions, TimeSpan) 方法等效于定义以下正则表达式:

复制

[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]  

若要进行比较,请参阅 IsMatch(String, String) 方法的示例。

注解

IsMatch 方法通常用于验证字符串或确保字符串符合特定模式,而不检索该字符串进行后续操作。 如果要确定一个或多个字符串是否与正则表达式模式匹配,然后检索它们以供后续操作,请调用 Match 或 Matches 方法。

静态 IsMatch(String, String, RegexOptions, TimeSpan) 方法等效于使用 pattern 指定的正则表达式模式构造 Regex 对象,并使用 options 指定的正则表达式选项并调用 IsMatch(String) 实例方法。 此正则表达式模式将缓存,以便正则表达式引擎进行快速检索。

pattern 参数包含符号描述要匹配的字符串的正则表达式语言元素。 有关正则表达式的详细信息,请参阅.NET Framework 正则表达式正则表达式语言-快速参考

matchTimeout 参数指定模式匹配方法在超时之前应尝试找到匹配项的时间长度。设置超时间隔可防止正则表达式在处理包含接近匹配项的输入时,这些表达式会出现依赖于过量回溯的正则表达式停止响应。 有关详细信息,请参阅正则表达式和回溯的最佳实践。 如果在该时间间隔内未找到匹配项,则该方法将引发 RegexMatchTimeoutException 异常。matchTimeout 覆盖为在其中执行该方法的应用程序域定义的任何默认超时值。

调用方说明

建议将 matchTimeout 参数设置为适当的值,例如两秒钟。 如果通过指定 InfiniteMatchTimeout禁用超时,则正则表达式引擎可提供略微更好的性能。 但是,只应在以下条件下禁用超时: -正则表达式处理的输入派生自已知的和受信任的源,或由静态文本组成。 这不包括用户动态输入的文本。

-对正则表达式模式进行了全面测试,以确保它有效地处理匹配、不匹配和接近匹配项。

-当正则表达式模式不包含已知的语言元素时,这些元素会导致在处理接近的匹配时导致过度回溯。

另请参阅

适用于

.NET Core

3.1 3.0 2.2 2.1 2.0 1.1 1.0

.NET Framework

4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 4.5.2 4.5.1 4.5 4.0 3.5 3.0 2.0 1.1

.NET Standard

2.1 2.0 1.6 1.4 1.3 1.2 1.1 1.0

UWP

10.0

Xamarin.Android

7.1

Xamarin.iOS

10.8

Xamarin.Mac

3.0

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值