C#正则表达式总结
创始人
2024-03-07 13:20:45
0

推荐一个专门用于编写正则表达式的网站:

regex101: build, test, and debug regex

参考文档:

https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

特殊字符的意义:

^ : 表示字符串的开头

例子: "abc"用"^a"匹配可以匹配出"a",而”bac"用^a匹配,则无法匹配成功。

$ : 表示字符串的结尾

例子:“abc"用”c$"匹配可以匹配出"c",而“acb"用“c$”匹配,则无法匹配成功。

+:表示匹配前面的字符1个~无限个(贪婪模式下会尽可能匹配多个字符,如果要用非贪婪模式,则要用”+?“)

例子:“abbc"用”ab+"匹配可以匹配出"abb"。“aabc"用“ab+”匹配可以匹配出"ab"。而”acc"用“ab+”匹配,则无法匹配成功。

*:表示匹配前面的字符0个~无限个(贪婪模式下会尽可能匹配多个字符,如果要用非贪婪模式,则要用”+?“)

例子:“abbc"用”ab*"匹配可以匹配出"abb"。“aabc"用“ab*”匹配可以匹配出"ab"。而”acc"用“ab*”匹配,可以匹配出“a"。

?:表示匹配前面的字符0个或者1个

例子:“abc"用”ab?"匹配可以匹配出"ab"。“ac"用“ab?”匹配可以匹配出"a"。

{2,4}:表示匹配前面的字符2个到4个,而{2,}则表示2个到无穷个

例子:”abbbb“用"b{2,3}"匹配可以匹配出”abbb“, "ab"用"b{2,3}"匹配,则无法匹配成功|

| : 表示“或”的意思

例子1:”ac“用"a|b"匹配可以匹配出”a“, ”bc“用"a|b"匹配可以匹配出”b“,而“cd”用"a|b"匹配,则无法匹配成功

例子2:”dabcd“用"abc|qwe"匹配可以匹配出”abc“,

例子3:”abcwe“用"ab(c|q)we"匹配可以匹配出”abcwe“,

[abc]:表示只要是中括号内的字符都可以匹配到,

[a-zA-Z0-9],则表示匹配大小写字母以及数字字符

例子:"abc"用[b]匹配,可以匹配出”b",”abc"用[bc]匹配,则可以匹配出"b“和”c"

[^abc]:则表示除开中括号内的字符都可以匹配到

例子:"abc"用[^b]匹配,可以匹配出”a"和“c”,”abc"用[^bc]匹配,则可以匹配出"a“

\ :反斜杠,转义字符

. :匹配所有字符

例子:"abc"用 . 匹配,可以匹配出”a"和“b“和“c”

\w:匹配字母、数字和下划线

\W:匹配除开字母、数字和下划线的所有字符

例子:"a&1_"用 \w 匹配,可以匹配出”a"和“1“和“_”,"a&1_"用 \W 匹配,可以匹配出”&"

\d:匹配数字字符

\D:匹配数字以外的字符

例子:"a&1_"用 \d 匹配,可以匹配出“1“,"a&1_"用 \D 匹配,可以匹配出"a"和”&"和”_"

\s:匹配空格和换行

\S:匹配除开空格和换行以外的字符

例子:"a c"用 \s 匹配,可以匹配出“ “,"a c"用 \S 匹配,可以匹配出"a"和”c"

群组(Group):

():用小括号括起来表示一个group,这样方便我们对字符串内的某些子串进行提取

例子:“ab_11"用”(([a-z]+)_(\d+))“进行匹配,group1就是“ab_11”, group2就是”ab“,group3就是”11“

代码:

using System;
using System.Text.RegularExpressions;public class Example
{public static void Main(){string pattern = @"(([a-z]+)_(\d+))";string input = @"ab_11";RegexOptions options = RegexOptions.Multiline;foreach (Match m in Regex.Matches(input, pattern, options)){Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);}}
}

害羞群组(shy group):

(?:  ) : 在小括号里的前端加入?:,则当前这个小括号匹配到的内容不会加入到群组中

例子:

例子:“ab_11"用”((?:[a-z]+)_(\d+))“进行匹配,group1就是“ab_11”,group2就是”11“,可以发现“ab”已经不在群组里了。

代码:

using System;
using System.Text.RegularExpressions;public class Example
{public static void Main(){string pattern = @"((?:[a-z]+)_(\d+))";string input = @"ab_11";RegexOptions options = RegexOptions.Multiline;foreach (Match m in Regex.Matches(input, pattern, options)){Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);}}
}

反向引用 (Backreferences):

\1 : 表示匹配group1的值(匹配的时候用\1,当使用regex.Replace的时候,\1要改成$1)

例子:“abc=def,abc=abc,def=abc,def=def”用“(abc|def)=\1”匹配,则会匹配到"abc=abc"和"def=def"。这里的\1就是群组1(group1)的值

左右合样(Lookaround):

右肯定合样:

例子:“ab”用“a(?=b)”匹配可以匹配到"a","ac"用"a(?=b)",则无法匹配成功

("a(?=b)"表示a后面一定要是b,但是b并不会被加到匹配结果里面)

右否定合样:

例子:“ac”用“a(?!b)”匹配可以匹配到"a","ab"用"a(?=b)",则无法匹配成功

("a(?!b)"表示a后面一定不能是b)

左肯定合样:

例子:“ab”用“(?<=a)b”匹配可以匹配到"b","cb"用"(?<=a)b",则无法匹配成功

("(?<=a)b"表示b前面一定要是a,但是a并不会被加到匹配结果里面)

左否定合样:

例子:“cb”用“(?

("(?

贪婪模式和非贪婪模式:

 例子:

"aaabab"用"a.*b"匹配会匹配到”aaabab"。(尽可能多的匹配)

"aaabab"用"a.*?b"匹配会匹配到“aaab”。(尽可能少的匹配)

推荐一个视频:

深入浅出正则表达式_哔哩哔哩_bilibili

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...