逻辑分组
语法 | 含义 | 举例 |
| | 逻辑或,表示两边的都可以匹配 | 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\-\.\?\,\'\/\\\+&%\$#_]*)?