正则表达式
核心语法速查
| 类别 | 元字符/语法 | 说明 | 简单示例 |
|---|---|---|---|
| 字符类 | [abc] |
匹配 a、b 或 c 中的任意一个字符。 | [ae] 匹配 “apple” 中的 ‘a’。 |
[^abc] |
匹配不在 a、b 或 c 中的任意字符。 | [^ae] 匹配 “apple” 中的 ‘p’, ‘p’, ‘l’。 |
|
[a-z] |
匹配 a 到 z 范围内的任意字符。 | [0-9] 匹配任意数字。 |
|
. |
匹配除换行外的任意单个字符。 | a.c 匹配 “abc”、“a c”。 |
|
\d |
匹配数字。等价于 [0-9]。 |
\d+ 匹配 “123”。 |
|
\w |
匹配字母、数字、下划线。 | \w+ 匹配 “user_name123”。 |
|
\s |
匹配空白字符(空格、制表符等)。 | \s 匹配 “a b” 中的空格。 |
|
| 量词 | * |
匹配前面的元素 0 次或多次。 | ab*c 匹配 “ac”、“abc”、“abbc”。 |
+ |
匹配前面的元素 1 次或多次。 | ab+c 匹配 “abc”、“abbc”,不匹配 “ac”。 |
|
? |
匹配前面的元素 0 次或 1 次。 | ab?c 匹配 “ac” 或 “abc”。 |
|
{n} |
匹配前面的元素 恰好 n 次。 | a{3} 匹配 “aaa”。 |
|
{n,} |
匹配前面的元素 至少 n 次。 | \d{2,} 匹配 “12” 或 “12345”。 |
|
{n,m} |
匹配前面的元素 n 到 m 次。 | \d{2,4} 匹配 “12”、“123”、“1234”。 |
|
| 定位点 | ^ |
匹配字符串的开始(多行模式下匹配行首)。 | ^Hello 匹配以 “Hello” 开头的字符串。 |
$ |
匹配字符串的结束(多行模式下匹配行尾)。 | end$ 匹配以 “end” 结尾的字符串。 |
|
\b |
匹配单词边界(字母数字和非字母数字之间)。 | \bcat\b 匹配 “cat”,不匹配 “category”。 |
|
| 分组与捕获 | (...) |
捕获组,将子模式分组并捕获匹配的文本。 | (ab)+ 匹配 “ababab”,并捕获内容。 |
(?:...) |
非捕获组,只分组,不捕获。提升性能。 | (?:ab)+ 匹配但不捕获。 |
|
(?<name>...) |
命名捕获组,通过名称而非索引访问。 | (?<year>\d{4}) 捕获名为 “year” 的4位数字。 |
|
| 零宽断言 | (?=...) |
正向先行断言,主表达式后必须紧跟此模式。 | \w+(?=\.) 匹配后跟点的单词(不包含点)。 |
(?!...) |
负向先行断言,主表达式后不能紧跟此模式。 | \d{3}(?!\d) 匹配后面不是数字的3位数。 |
|
(?<=...) |
正向后行断言,主表达式前必须紧跟此模式。 | (?<=\$)\d+ 匹配美元符号后的数字。 |
|
(?<!...) |
负向后行断言,主表达式前不能紧跟此模式。 | (?<!-)\d+ 匹配前面不是负号的数字。 |
|
| 转义 | \ |
转义特殊字符,使其匹配字面值。 | \. 匹配字符 “.”, \\ 匹配 “\”。 |
| 选项 | (?i) |
内联选项,忽略大小写(可放在组内)。 | (?i)hello 匹配 “hello”, “HELLO”。 |
代码
1 // 1. 静态方法 (适用于单次、快速匹配) 2 string input = "Hello World"; 3 bool isMatch = Regex.IsMatch(input, @"^Hello"); // 检查是否匹配 4 //MessageBox.Show(isMatch.ToString()); 5 //MessageBox.Show(isMatch ? "匹配成功" : "匹配失败"); 6 7 Match match =Regex.Match(input,@"\b(\w+)\b"); // 返回第一个匹配 8 9 MatchCollection matches=Regex.Matches(input, @"\b\w+\b"); // 返回所有匹配 10 11 12 //这里是区分大小写 13 string result=Regex.Replace(input, @"World", "C#"); //替换 结果:"Hello C#" 14 string result1 = Regex.Replace(input, @"world", "C#"); //替换 结果:"Hello World" 15 16 string[] parts=Regex.Split("apple,banana,orange", @","); //拆分 结果:{"apple","banana","orange"} 17 18 19 20 // 2. 实例方法 (适用于重复使用同一模式,效率更高) 21 Regex regex = new Regex(@"\b(?<word>\w+)\b", RegexOptions.IgnoreCase); 22 Match m = regex.Match(input); 23 Console.WriteLine("--------------------------------"); 24 foreach (Group g in m.Groups) 25 { 26 Console.WriteLine($"Group:{g.Name}: {g.Value}"); // 通过名称访问: m.Groups["word"].Value 27 } 28 Console.WriteLine("--------------------------------"); 29 30 31 // 3. 常用 RegexOptions 选项 32 // IgnoreCase: 忽略大小写 | Multiline: 多行模式 (改变 ^ 和 $ 的行为) 33 // Compiled: 编译为MSIL,提升多次匹配速度(增加启动开销) 34 // CultureInvariant: 忽略区域性差异

浙公网安备 33010602011771号