正则表达式30分钟入门教程 | 菜鸟教程 (runoob.com) 别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有想像中的那么困难。当然,如果你看完了这篇教程之后,发现自己明白了很多,却又几乎什么都记不得,那也是很正常的——我认为,没接触过正则表达式的人在看完这篇教程后,能把提到过的语法记住80%以上的可能性为零。这里只是让你明白基本的原理,以后你还需要多练习,多使用,才能熟练掌握正则表达式。
除了作为入门教程之外,本文还试图成为可以在日常工作中使用的正则表达式语法参考手册。就作者本人的经历来说,这个目标还是完成得不错的——你看,我自己也没能把所有的东西记下来,不是吗?
Day1
特殊字符
元字符(常用)
\b单词的开头和结尾,只匹配一个位置.匹配除了换行符以外的任何字符*数量 *前面的内容可以连续重复使用任意次+匹配重复1次或更多次?重复零次或一次\d数字 eg.0\d{2}-\d{8},012-34567890\s空白符(空格,制表符(Tab),换行符,中文全角空格等)\w匹配字母\数字\下划线\汉字\^和\$eg.QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$如果是:^\d{5,}$,代表5到更多位数字
字符类
- [0-9]
- [a-z0-9A-Z_] 等同于\w
- [aeiou] 匹配任何一个英文元音字母
下面是一个更复杂的表达式:(?0\d{2}[) -]?\d{8}。
注意:"("和")"也是元字符,后面的分组节里会提到,所以在这里需要使用转义
这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。
解决对应问题需要分支条件
转义
C:\\Windows 匹配 C:\Windows
分组
(\d{1,3}.){3}\d{1,3}
(\d{1,3}.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。
((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
反义
后向引用
(\d{4})([-/])\d{2}\2\d{2} 解释:
(\d{4}):捕获四位数字的年份。([-/]):捕获分隔符("-" 或 "/"),并将其存储在第二个捕获组中。\d{2}:匹配两位数字的月份。\2:引用第二个捕获组的内容,确保分隔符一致。\d{2}:匹配两位数字的日期。
例如,字符串 "2023-01-01" 和 "2023/01/01" 会被匹配到,而 "2023-01/01" 不会被匹配到。
- 捕获组编号:捕获组的编号从1开始,按左括号出现的顺序递增。
- 命名捕获组:一些正则表达式引擎支持命名捕获组,可以通过名称来引用捕获的内容,例如
(?<name>pattern)和\k<name>。 - 性能考虑:使用过多的捕获组和后向引用可能会影响正则表达式的性能,因此在实际应用中需要权衡使用。
零宽断言&负向零宽断言
总结
后向引用是正则表达式中非常有用的功能,能够帮助我们匹配重复模式和验证格式一致性。通过合理使用后向引用,可以大大提高正则表达式的灵活性和准确性。