正则表达式总结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\-\.\?\,\'\/\\\+&%\$#_]*)?

 


posted @ 2019-07-03 17:05  #ZYX  阅读(102)  评论(0)    收藏  举报