正则表达式与POSIX字符

warning: 这篇文章距离上次修改已过1392天,其中的内容可能已经有所变动。
toc end ->

正则表达式

warning:注意:正则匹配规则较多,此处列出部分常用的语法,请耐心等待完善!如果您发现有错误或仍需添加的部分请在评论区留言或发送邮件。

正则语法

正则表达式说明
\w匹配文字和数字字符,也就是[A-Za-z0-9]
\W\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b单词锁定符,如: \bgrep\b只匹配grep。
^锚定行的开始 如:^grep匹配所有以grep开头的行。
$锚定行的结束 如:grep$匹配所有以grep结尾的行。
.匹配一个非换行符的字符 如:gr.p匹配gr后接一个任意字符,然后是p。
*匹配零个或多个先前字符 如:*grep匹配所有一个或多个空格后紧跟grep的行。
.*一起用代表任意字符。
[]匹配一个指定范围内的字符,如[Gg]rep匹配Grep和grep。
[^]匹配一个不在指定范围内的字符,如:[^A-FH-Z]rep匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
()标记匹配字符,被暂存到临时区域(最多有9个),它们可以用 1 到9 的符号来引用。如(love),love被标记为\1
\<锚定单词的开始,如:\<grep匹配包含以grep开头的单词的行。
\>锚定单词的结束,如grep\>匹配包含以grep结尾的单词的行。
x{m}重复字符x,m次,如:o\{5\}匹配包含5个o的行。
x{m,}重复字符x,至少m次,如:o\{5,\}匹配至少有5个o的行。
x{m,n}重复字符x,至少m次,不多于n次,如:o\{5,10\}匹配5--10个o的行。

例子

#匹配中文
[\u4e00-\u9fa5]+

#匹配时间(时:分:秒)
([01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d

#匹配日期(年-月-日)
(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)

#匹配iPv4地址
\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}

#匹配邮箱
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}

#匹配url
[a-zA-z]+://[^\s]*

#匹配身份证号(18位)
^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$

POSIX字符

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类

[:alnum:][A-Za-z0-9]另一种写法都表示匹配文字数字字符(A-Z,a-z,0-9)。

info:[]本身就是POSIX字符的一部分。只有把它们放到[]号内才能成为正则表达式,如[A-Za-z0-9][[:alnum:]]
在linux下的grepfgrep(等同于grep -F)外,都支持POSIX的字符类。

POSIX字符规则

POSIX字符说明
[:alnum:]文字数字字符(A-Z,a-z,0-9)
[:digit:]数字字符(0-9)
[:alpha:]文字字符(A-Z,a-z)
[:lower:]小写字符(a-z)
[:upper:]大写字符(A-Z)
[:graph:]非空字符(非空格、控制字符)
[:print:]非空字符(包括空格)
[:blank:]空格或制表符
[:cntrl:]控制字符(ASCII 0~31 和 ASCII 127)
[:punct:]标点符号(不属于[:alnum:][:cntrl:]的任何字符)
[:space:]所有空白字符(空格,制表符,换行符)
[:xdigit:]十六进制数字(0-9,a-f,A-F)
最后修改于:2020年06月04日 17:19
评论已关闭