正则表达式是一种对字符串操作的逻辑共识,就是用事先定义好的字符以及这些字符的特定组合组成一个”规则字符串“,这个“规则字符串”用来对字符串进行过滤,简单来说就是一种限制条件,
一般用处例如我们的密码限制输入不少于多少位,或者说身份证或手机号的固定位数,其目的是在保护我们于行程序的安全性,因为我们的程序运行是进入的参数有时需要固定的类型但恰巧
又不愿意按规定办事的,所以我们自己进行设定,加强我们程序的可行性与健壮性。
1.字符类
. 匹配除了换行符(\n)以外的任意一个字符
\w 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个
\d 任意一个数字,0~9 中的任意一个
\s 包括空格、制表符、换页符等空白字符的其中任意一个
\W\D\S 非字母, 数字, 空白字符
[abc] 匹配a、 b、或c中的任何一个
[^abc] 匹配 a、b和c之外的任何一个
[a-g] a-g间的任意一个字符
2.锚
^abc$ 字符串的开头/结尾
\b \B 单词边界、非单词的边界
转义字符
\. \* \\ 转义特殊字符
\t\n\r 制表符, LF换行符, CR换行符
3. 分组 & 前瞻后顾
(abc) 捕获分组
\1 反向引用#1
(?:abc) 不捕获分组
(?=abc) 正向前瞻
(?!abc) 负向前瞻
4.量词 & 分支
a* a+ a? 0个或更多,1个或更多,0个或1个
a{5} a{2,} 刚好5个,2个或以上
a{1,3} 1~3个
a+? a{2,}? 贪婪匹配(仅可能少匹配)
ab|cd 配 ab 或 cd
* 匹配 0 或多个字符 a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
? 匹配任意一个字符 a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list] 匹配 list 中的任意单一字符 a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list] 匹配 除list 中的任意单一字符 a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b... a9b。
{string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串 a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。
需要说明的是:通配符看起来有点象正则表达式语句,但是它与正则表达式不同的,不能相互混淆。把通配符理解为shell 特殊代号字符就可。而且涉及的只有,*,? [] ,{} 这几种。
主要语法普通字符普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。非打印字符非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:
字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 0c 和 \cL。
\n 匹配一个换行符。等价于 0a 和 \cJ。
\r 匹配一个回车符。等价于 0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 09 和 \cI。
\v 匹配一个垂直制表符。等价于 0b 和 \cK。
特殊字符所谓特殊字符,就是一些有特殊含义的字符,如上面说的 runoo*b 中的 *,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 \: runo\*ob 匹配 runo*ob。许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:
特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'
标记一个子表达式的开始和结束位置,子表达式可以获取供以后使用
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
. 匹配除换行符 \n 之外的任何单字符
[ 标记一个中括号表达式的开始
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符