.net 正则表达式学习笔记

这篇博客详细介绍了.NET正则表达式的使用,包括字符转义、字符类、定位点、数量词和分组构造等核心概念。通过实例解析了如何进行字符串匹配,如w匹配单词字符,d匹配十进制数字,以及如何使用?、+、*等符号控制匹配次数。还提到了非贪婪匹配的概念,帮助读者深入理解正则表达式的灵活性和强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档查阅https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-language-quick-reference

@ 字符串内的\字符不转义,完全保留原字符

字符转义

c ASCII符

x 十六进制

u Unicode字符

字符类

[] 匹配单个字符                                    例"lane" 中的 "a" 和 "e"

^ 非的意思

[^] 即匹配除了^后面的以外的字符        例"reign" 中的 "r""g" 和 "n"

[A-Z]  -即范围

. 通配符即any

\p和\P Unicode通用类别或命名块(度娘知道)中的,p为匹配字符,P为匹配以外字符。

\w 单词字符(字母数字) \W 非单词字符

\s 空白字符 \S 非空白(一般与其它组合使用)

\d 十进制 \D 非十进制

定位点

^ 头开始匹配

$ 尾开始匹配

\A 匹配结果一定在开头

\Z \z 匹配结果一定在结尾,Z比z多一个可在\n之前

\G 必须从上一个匹配结束处开始匹配

\b \b  必须匹配在这之间  \B 必须不在之间

数量词(以下都是匹配上一个元素)

匹配上一个元素一次或零次

+ 一次或多次

* 零次或多次

{n} 刚好n次

{n,} n次及以上

{n,m} n到m次

*?    +?    ??  这三个都是兼。即零或多次,一或多次,零或一次,但是匹配次数都尽量少。例如:abaaaaabb用a.*b去匹配,会匹配到abaaaaabb(默认贪婪匹配),如果用这几个就可以尽可能匹配次数少,像a.*?b就只匹配到ab。

{n}?   {n,}? {n,m}?  三个同理,匹配恰好n个,n个尽可能少,n到m个尽可能少。

 

分组构造

(?= subexpression)零宽度正预测先行断言。\w+(?=\.)"He is. The dog ran. The sun is out." 中的 "is"、 "ran" 和 "out"
(?! subexpression)零宽度负预测先行断言。\b(?!un)\w+\b"unsure sure unity used" 中的 "sure" 和 "used"
(?<=subexpression)零宽度正回顾后发断言。(?<=19)\d{2}\b"1851 1999 1950 1905 2003" 中的 "99"、"50"和 "05"
(?<! subexpression)零宽度负回顾后发断言。(?<!wo)man\b"Hi woman Hi man" 中的 "man"

拿这几个例子来说,分别是1最后一个字符必须是.,2开头字符不能是un,3开头字符必须是19,4开头字符不能是wo。

(?> subexpression)非回溯(也称为"贪婪")子表达式。

这个就字面意思,匹配过程不回溯。

还有几个分组构造不太理解,会了再来写。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值