正则表达式基础知识

正则表达式

什么是正则表达式: 通俗来说,就是定义了一种匹配字符串的规则. 然后就可以根据这个规则,在待匹配的字符集中找到满足这个匹配规则的一部分(或几部分).

常用元字符

代码/语法说明
. 匹配除了换行符以外的任意单个字符
d 匹配数字
w 匹配字母,数字,下划线
s 匹配任意空白字符( , , ,空格)
 匹配单词的边界(单词的开始或结束)
匹配一个换行符
匹配一个制表符
a|b 匹配字符a或者b
^ 匹配字符串的开始
$ 匹配字符串的结束

反义

代码/语法说明
D 匹配任意非数字的字符
W 匹配任意不是字母,数字,下划线的字符
S 匹配任意非空白字符
B 匹配非单词边界

字符转义

如果想匹配元字符本身(., w等), 这时就需要在元字符前使用(反斜杠)来取消字符的特殊含义. 例如,使用., *, 来匹配.,*,本身.

匹配次数

代码/语法说明
? 重复零次或一次
+ 重复零次或任意多次
* 重复零次或任意多次
{m} 重复m次
{m,} 重复m次或更多次
{m, n} 重复m到n次

字符组

代码/语法说明
[xyz] 匹配字符集中的任意一个字符(字符集中字符可以是任意类型)
[^xyz] 匹配字符集中的任意一个字符
[a-z] 可以指定范围, [a-z]表示匹配任意一个小写的英文字母
[^a-z] 匹配任意一个非小写英文字母的字符
[0-9] 匹配任意一个数字,等同于d
[^0-9] 匹配任意非数字
[0-9a-zA-Z_] 等同于w

分组

重复单个字符,直接在字符后面加上限定符就可以; 但如果想要重复多个字符,该如何处理? 可以使用小括号来指定子表达式(也叫做分组),然后就可以指定这个子表达式的重复次数.

贪婪匹配与懒惰匹配

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

代码/语法 
?? 重复零次或一次,但尽可能少的重复
+? 重复一次或更多次,但尽可能少的重复
*? 重复任意次,但尽可能少的重复
{m, n}? 重复m到n次,但尽可能少的重复
{m,}? 重复m次以上,但尽可能少的重复

参考网址: https://www.jb51.net/tools/zhengze.html

原文地址:https://www.cnblogs.com/gandoufu/p/9457379.html