正则表达式
正则表达式(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” 在 a
和 e
之间有更多的字母。
注意:我们将正则表达式作为字符串指定。例如:
string pattern = "^a...e$";
正则表达式的工作原理
How Regex Works?
在 C# 中,有一个名为正则表达式引擎(regex engine)的引擎,它会在给定的字符串中检查正则表达式模式。
正则表达式引擎接收两个输入:
^a...e$
– 正则表达式模式"apple"
– 我们要匹配的字符串
当正则表达式模式被传递到引擎时,它会被解释。引擎负责执行匹配操作,即将正则表达式模式与输入字符串进行匹配。
元字符
Metacharacters
在正则表达式中,元字符用于指定模式。元字符是正则表达式引擎以特殊方式解释的字符。
一些基本的元字符包括:
[]
– 方括号.
– 点号^
– 插入符$
– 美元符号*
– 星号+
– 加号?
– 问号{}
– 大括号()
– 圆括号|
– 选择符
方括号 []
方括号 []
用于指定要匹配的字符集。例如:
[abc]
匹配任何包含 a
、b
或 c
的字符串。以下是一些示例:
字符串 | 是否匹配 | 原因 |
---|---|---|
a | 匹配 | 字符串包含 a |
ac | 匹配 | 字符串包含 a 和 c |
jim | 不匹配 | 字符串不包含 a 、b 或 c |
abc | 匹配 | 字符串包含 a 、b 和 c |
点号 .
点号 .
表示任何单个字符(除了换行符 \n
)。
例如:
...
匹配包含三个字母的字符串。以下是一些示例:
字符串 | 是否匹配 | 原因 |
---|---|---|
abs | 匹配 | 字符串包含三个字母(a、b、s) |
ac | 不匹配 | 字符串不包含三个字母 |
jim | 匹配 | 字符串包含三个字母 |
abcd | 匹配 | 字符串包含三个字母 |
插入符 ^
插入符 ^
表示字符串以特定字符开始。例如:
^m
匹配以字母 m
开头的字符串。以下是一些示例:
字符串 | 是否匹配 | 原因 |
---|---|---|
man | 匹配 | man 以 m 开头 |
m | 匹配 | m 以 m 开头 |
Man | 不匹配 | Man 不以 m 开头 |
sms | 不匹配 | sms 不以 m 开头 |
美元符号 $
美元符号 $
表示字符串以特定字符结束。例如:
y$
匹配以字母 y
结尾的字符串。以下是一些示例:
字符串 | 是否匹配 | 原因 |
---|---|---|
monday | 匹配 | monday 以 y 结尾 |
say | 匹配 | say 以 y 结尾 |
myname | 不匹配 | myname 不以 y 结尾 |
星号 *
星号 *
匹配零次或多次出现的模式。例如:
ca*t
匹配在 c
和 t
之间有任意数量(包括零)的 a
的字符串。以下是一些示例:
字符串 | 是否匹配 | 原因 |
---|---|---|
cat | 匹配 | cat 在 c 和 t 之间有一个 a |
ct | 匹配 | ct 在 c 和 t 之间有零个 a |
caaaat | 匹配 | caaa 在 c 和 t 之间有三个 a |
crt | 不匹配 | crt 在 c 和 t 之间有 r (不是 a ) |
caatcaaat | 匹配 | caat 和 caaat 中都有 a |
加号 +
加号 +
匹配一个或多个出现的模式。例如:
ma+t
匹配在 m
和 t
之间有一个或多个 a
的字符串。以下是一些示例:
字符串 | 是否匹配 | 原因 |
---|---|---|
mat | 匹配 | mat 在 m 和 t 之间有一个 a |
mt | 不匹配 | mt 不在 m 和 t 之间有 a |
matemaat | 匹配 | mat 和 maat 中都有 a |
mart | 不匹配 | a 在 mart 中不是直接跟在 t 后面 |
问号 ?
问号 ?
匹配零次或一次出现的模式。例如:
ma?n
匹配在 m
和 n
之间有零次或一次 a
的字符串。以下是一些示例:
字符串 | 是否匹配 | 原因 |
---|---|---|
man | 匹配 | man 在 m 和 n 之间有一个 a |
mn | 匹配 |