平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“C#正则表达式详细图文教程”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
(这部分内容难以理解,想要讲透还是比较困难,请跟随贴主一步一步探寻)
首先我们要知道正则表达式能够做什么?
总的来说就是用来模式匹配和搜索文本的一个工具,也能够把它想作是一个 超级通配符
对于通配符举一个轻松的例子,也常常发生在我们查找文件的过程
//像查找 data(w)?.dat 这种,你可能会查到以下形式的文件
data.dat
data1.dat
data2.dat
datax.dat
dataN.dat
//而像查找 data.*.dat 这种,你可能会查到以下形式的文件
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
// ? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符
从实现思路看,从上述的搜索结果很容易看出,通配符确实具有它的强大,但是也存在相应限制。假如类似文件名很多,也是日常中常会碰到的这种情况下,定位到指定文件夹就显得较为困难。
这也就是为什么我们会在引入“超级通配符”,即正则表达式。
想要学习正则表达式,我们要从一个轻松的正则表达式开始认识。

在这个场景下,以上这个轻松的正则表达式其实在生活中常常会遇到,只是大家都没有过多去关心这背后的实现原理。以贴主自己为例,打游戏无法取到心仪的名字也正是它在“捣鬼”,hhh
言归正传
由上面的轻松正则表达式进一步进阶为下面的表达式

[a-zA-Z0-9_-] 表示字符集,包含小写字母、大写字母、数字、下划线_和连接字符-{3,15} 表示前面的字符集最少出现 3 次,最多出现 15 次,从而限制了用户名的长度在 3 到 15 个字符之间$ 表示匹配字符串的结尾以上的正则表达式匹配 runoob、runoob1、run-oob、run_oob等,但不匹配 ru、 runoob$等
当然正则表达式的日常采用远不止上面的这些,它也有它自己的元字符和特性

结合项目来看,看到这个表格,相信很多小伙伴就会比较焦虑,这么多都需记住吗?确切的来说是,但又不是。因为这个东西本就是孰能生巧的一个过程,当你用多了,它自然就会在你脑子里留下印象,你自然也就记住了。就好比贴主之前不会做饭,食材和调料放什么怎么放都不知道,但后来迫于生活的压力不得不自己做,于是慢慢就会了,也就记住了。这是一个道理,hhh
从实现思路看,有了前面的基础,相信你对正则表达式已经有了一个比较确切的认识,由于目前以C#语言为主,故后面的内容围绕C#展开,不同语言可能用法有所不同,但是底层的逻辑基本都是一致的。下面的内容会略微枯燥,但是贴主已经尽力挑最精华的部分讲,请耐心看完。

实际处理时,上述不好理解的应该主要是p{name}和P{name},一个是与 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配,而另一个则相反,与不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。在 Unicode 标准中,Lu 代表 "Letter, uppercase"(大写字母)。也就有了上面的结果。具体遇到了之后能够借助查阅资料得知。


实际处理时,下面所列举的是历史遗留的控制字符 (在日常中较少用,可要到后再前往学习即可)
a (报警/响铃):早期终端遇到这个字符会发出“滴”的响声v (垂直制表符) 和 f (换页符):早期用来控制打印机纸张的滚动e (转义符 Escape):匹配 ASCII 里的 ESC 键控制码c X (ASCII 控制字符):用来匹配按键组合。比如 cC 匹配 Ctrl + C 产生的控制字符b (退格符 Backspace):注意这里有一个很关键的细节! 在正则表达式里,b 通常代表“单词边界”(比如匹配整个单词)。只有当它被放在方括号内,写成 [b] 时结合项目来看,,它才代表键盘上的“退格键”(Backspace)。图片中的描述特意强调了“在字符类中”,就是指放在 [] 里面。结合项目来看,您的键盘打不出某个字符,或者您想极其精确地指定某个字符时,能够采用它的计算机底层编码来匹配。这三种方式本质上是一样的,只是进制不同:
x nn (十六进制):用两位十六进制数表示字符。比如 x20 代表空格(ASCII码 32 的十六进制是 20)u nnnn (Unicode):用四位十六进制数表示全球统一的 Unicode 字符。比如 u0020 同样代表普通空格。它也能够用来匹配中文等复杂字符(如 u4e00 代表汉字“一”)nnn (八进制):用两到三位八进制数表示。比如