正则表达式总结2
逻辑分组
| 语法 | 含义 | 举例 |
| | | 逻辑或,表示两边的都可以匹配 | ab|cd可以匹配ab和cd |
| (...) |
被括号包括的是一个分组,每一个分组都有一个编号,从左到右 每遇一个(则编号加1,常结合|使用。 |
(ab|cd|ed) 可以匹配ab,cd,ef |
| (?P<NAME>....) |
在(...)原有编号的基础上,指定一个名字NAME |
(?P<test>123|456|789)给这个分组 指定一个test的名字 |
| \number | 引用前面的几号分组的内容 |
如(\d)ab\1中\1引用前面的(\d)匹配内容相同,即匹配 1ab1,2ab2,3ab3 |
| (?P=NAME) | 引用名称为NAME的分组 |
如(?P<test>\d)ab(?P=test)等价于前面的(\d)ab\1 |
注意:关于最后一个(?P=NAME)和(?P<NAME>..)几乎不常用,很多不支持
验证\number的匹配:
常用POSIX字符
在Linux的字符串匹配中应用的比较广泛
| 字符 | 说明 | 简写 |
| [:digit:] | 十进制数字 |
\d |
| [:xdigit:] | 任何十六进制数字 | |
| [:alpha:] | 任何字母包括大小写 | |
| [:lower:] | 小写字母 | |
| [:upper:] | 大写字母 | |
| [:alnum:] | 任何字母或数字 | \w |
| [:space:] | 空白字符,包括空格 | \s |
| [:print:] | 任何可打印字符 | |
| [:graph:] | 任何可打印字符,但不包括空格 |
在grep函数中需要在外层再加一个[ ]符号
匹配任意字母和数字组成的字符串

匹配非数字开头的由字母数字组成的字符串

贪婪匹配和懒惰匹配
贪婪匹配:尽可能匹配多的字符串
量词默认贪婪匹配,如+,*,{m,n},?
例子:

懒惰匹配:尽可能匹配少的字符串
在量词的后面加一个?,如+?,*?,{m,n}?,??等,原意不变但尽可能少的匹配字符串
例子:

常用匹配:
身份证匹配(15位或者18位):
\d{15}|(\d{18}|(\d{17}[Xx]))
QQ邮箱匹配(10000开始):
[\w.-]{3,18}@qq\.com
匹配QQ号:
[1-9]\d{4,}
数字,字母,下划线组成的字符串:
^[A-Za-z0-9]+$
日期格式:
^\d{4}-\d{1,2}-\d{1,2}$
匹配HTML中的URL:
(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?


浙公网安备 33010602011771号