高级

正则表达式

预计阅读时间2 分钟 9 views

正则表达式(Regular Expression,简称 Regex)是一种用于检查给定字符串是否匹配特定模式的工具。例如,以下正则表达式模式:

^m.t$

表示一个由三个字母组成的字符串,其中:

  • ^ – 表示字符串以 m 开始
  • . – 表示任意一个字母或字符
  • $ – 表示字符串以 t 结束

因此,像 “mat” 和 “mit” 这样的字符串与上述正则表达式模式匹配,而像 “mom” 和 “magnet” 这样的字符串则不匹配,因为它们不符合以 m 开头并以 t 结尾的三个字母的要求。

下面我们将详细介绍正则表达式的使用。

C# 中的 Regex 类

C# Regex Class

C# 提供了一个名为 Regex 的类来使用正则表达式的特性。在使用 Regex 类之前,我们需要引用 System.Text.RegularExpressions 命名空间。

然后,我们需要创建一个 Regex 类的实例:

Regex regexName = new Regex(pattern);

这里:

  • regexName – 是 Regex 类实例的名称
  • pattern – 我们想要传递的正则表达式模式

示例:C# Regex

Example: C# Regex

using System;
using System.Text.RegularExpressions;

class Program
{
    // 正则表达式模式:五个字母的单词,以 "a" 开头,以 "e" 结尾
    static string pattern = "^a...e$";

    static void Main()
    {
        // 创建 Regex 类的实例,并传入正则表达式(即模式)
        Regex rg = new Regex(pattern);

        // IsMatch() 方法如果 "apple" 符合正则表达式模式,则返回 true
        if (rg.IsMatch("apple"))
        {
            Console.WriteLine("字符串匹配模式");
        }
        else
        {
            Console.WriteLine("字符串不匹配模式");
        }
    }
}

Output:

字符串匹配模式

在上述示例中,我们检查了字符串 “apple” 是否符合定义的正则表达式模式。

模式 ^a...e$ 表示任何以 a 开头并以 e 结尾的五个字母的字符串。如果我们传入另一个字符串,例如 “apache”,它不会匹配模式,因为 “apache” 在 ae 之间有更多的字母。

注意:我们将正则表达式作为字符串指定。例如:

string pattern = "^a...e$";

正则表达式的工作原理

How Regex Works?

在 C# 中,有一个名为正则表达式引擎(regex engine)的引擎,它会在给定的字符串中检查正则表达式模式。

正则表达式引擎接收两个输入:

  1. ^a...e$ – 正则表达式模式
  2. "apple" – 我们要匹配的字符串

当正则表达式模式被传递到引擎时,它会被解释。引擎负责执行匹配操作,即将正则表达式模式与输入字符串进行匹配。

元字符

Metacharacters

在正则表达式中,元字符用于指定模式。元字符是正则表达式引擎以特殊方式解释的字符。

一些基本的元字符包括:

  • [] – 方括号
  • . – 点号
  • ^ – 插入符
  • $ – 美元符号
  • * – 星号
  • + – 加号
  • ? – 问号
  • {} – 大括号
  • () – 圆括号
  • | – 选择符

方括号 []

方括号 [] 用于指定要匹配的字符集。例如:

[abc]

匹配任何包含 abc 的字符串。以下是一些示例:

字符串是否匹配原因
a匹配字符串包含 a
ac匹配字符串包含 ac
jim不匹配字符串不包含 abc
abc匹配字符串包含 abc

点号 .

点号 . 表示任何单个字符(除了换行符 \n)。

例如:

...

匹配包含三个字母的字符串。以下是一些示例:

字符串是否匹配原因
abs匹配字符串包含三个字母(a、b、s)
ac不匹配字符串不包含三个字母
jim匹配字符串包含三个字母
abcd匹配字符串包含三个字母

插入符 ^

插入符 ^ 表示字符串以特定字符开始。例如:

^m

匹配以字母 m 开头的字符串。以下是一些示例:

字符串是否匹配原因
man匹配manm 开头
m匹配mm 开头
Man不匹配Man 不以 m 开头
sms不匹配sms 不以 m 开头

美元符号 $

美元符号 $ 表示字符串以特定字符结束。例如:

y$

匹配以字母 y 结尾的字符串。以下是一些示例:

字符串是否匹配原因
monday匹配mondayy 结尾
say匹配sayy 结尾
myname不匹配myname 不以 y 结尾

星号 *

星号 * 匹配零次或多次出现的模式。例如:

ca*t

匹配在 ct 之间有任意数量(包括零)的 a 的字符串。以下是一些示例:

字符串是否匹配原因
cat匹配catct 之间有一个 a
ct匹配ctct 之间有零个 a
caaaat匹配caaact 之间有三个 a
crt不匹配crtct 之间有 r(不是 a
caatcaaat匹配caatcaaat 中都有 a

加号 +

加号 + 匹配一个或多个出现的模式。例如:

ma+t

匹配在 mt 之间有一个或多个 a 的字符串。以下是一些示例:

字符串是否匹配原因
mat匹配matmt 之间有一个 a
mt不匹配mt 不在 mt 之间有 a
matemaat匹配matmaat 中都有 a
mart不匹配amart 中不是直接跟在 t 后面

问号 ?

问号 ? 匹配零次或一次出现的模式。例如:

ma?n

匹配在 mn 之间有零次或一次 a 的字符串。以下是一些示例:

字符串是否匹配原因
man匹配manmn 之间有一个 a
mn匹配

Leave a Comment

分享此文档

正则表达式

或复制链接

内容