字符 | 含义 | 举例 |
---|---|---|
. |
匹配任意一个字符 | abc. 可以匹配abcd、abc9等 |
[] |
匹配括号中的任意一个字符 | [abc] d可以匹配ad、bd或cd |
- |
在[]括号内表示字符范围 | [0-9a-fA-F] 可以匹配一位十六进制数字 |
^ |
位于[]括号内的开头,匹配除括号中的字符之外的任意一个字符 | [^xy] 匹配除xy之外的任一字符,因此[^xy]1 可以匹配a1、b1但不匹配x1、y1 |
[[:xxx:]] |
grep工具预定义的一些命名字符类 | [[:alpha:]] 匹配一个字母,[[:digit:]] 匹配一个数字 |
字符 | 含义 | 举例 |
---|---|---|
? |
紧跟在它前面的单元应匹配零次或一次 | [0-9]?\.[0-9] 匹配0.0、2.3、.5等,由于.在正则表达式中是一个特殊字符,所以需要用\转义一下,取字面值 |
+ |
紧跟在它前面的单元应匹配一次或多次 | [a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+ 匹配email地址 |
* |
紧跟在它前面的单元应匹配零次或多次 | [0-9][0-9]* 匹配至少一位数字,等价于[0-9]+,[a-zA-Z_]+[a-zA-Z_0-9]*匹配C语言的标识符 |
{N} |
紧跟在它前面的单元应精确匹配N次 | [1-9][0-9]{2} 匹配从100到999的整数 |
{N,} |
紧跟在它前面的单元应匹配至少N次 | [1-9][0-9]{2,} 匹配三位以上(含三位)的整数 |
{,M} |
紧跟在它前面的单元应匹配最多M次 | [0-9]{,1} 相当于[0-9]? |
{N,M} |
紧跟在它前面的单元应匹配至少N次,最多M次 | [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 匹配IP地址 |
字符 | 含义 | 举例 |
---|---|---|
^ |
匹配行首的位置 | ^Content 匹配位于一行开头的Content |
$ |
匹配行末的位置 | ;$ 匹配位于一行结尾的;号,^$ 匹配空行 |
\< |
匹配单词开头的位置 | \<th 匹配… this,但不匹配ethernet、tenth |
\> |
匹配单词结尾的位置 | p\> 匹配leap …,但不匹配parent、sleepy |
\b |
匹配单词开头或结尾的位置 | \bat\b 匹配… at …,但不匹配cat、atexit、batch |
\B |
匹配非单词开头和结尾的位置 | \Bat\B 匹配battery,但不匹配… attend、hat … |
字符 | 含义 | 举例 |
---|---|---|
\ |
转义字符,普通字符转义为特殊字符,特殊字符转义为普通字符 | 普通字符< 写成\< 表示单词开头的位置,特殊字符. 写成\. 以及\ 写成\\ 就当作普通字符来匹配 |
() |
将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符 | ([0-9]{1,3}\.){3}[0-9]{1,3} 匹配IP地址 |
| |
连接两个子表达式,表示或的关系 | n(o | either) 匹配no或neither |
以上介绍的是grep正则表达式的Extended规范,Basic规范也有这些语法,只是字符?+{}|()
应解释为普通字符,要表示上述特殊含义则需要加\
转义。如果用grep而不是egrep,并且不加-E
参数,则应该遵照Basic规范来写正则表达式。
[\u4e00-\u9fa5]
[^\x00-\xff]
\n\s*\r
<(\S*?)[^>]*>.*?</\1>|<.*? />
^\s*|\s*$
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
[a-zA-z]+://[^\s]*
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
\d{3}-\d{8}|\d{4}-\d{7}
[1-9][0-9]{4,}
[1-9]\d{5}(?!\d)
\d{15}|\d{18}
\d+\.\d+\.\d+\.\d+
表达式 | 说明 |
---|---|
^[1-9]\d*$ |
匹配正整数 |
^-[1-9]\d*$ |
匹配负整数 |
^-?[1-9]\d*$ |
匹配整数 |
^[1-9]\d*|0$ |
匹配非负整数(正整数 + 0) |
^-[1-9]\d*|0$ |
匹配非正整数(负整数 + 0) |
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ |
匹配正浮点数 |
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ |
匹配负浮点数 |
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ |
匹配浮点数 |
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ |
匹配非负浮点数(正浮点数 + 0) |
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ |
匹配非正浮点数(负浮点数 + 0) |
表达式 | 说明 |
---|---|
^[A-Za-z]+$ |
匹配由26个英文字母组成的字符串 |
^[A-Z]+$ |
匹配由26个英文字母的大写组成的字符串 |
^[a-z]+$ |
匹配由26个英文字母的小写组成的字符串 |
^[A-Za-z0-9]+$ |
匹配由数字和26个英文字母组成的字符串 |
^\w+$ |
匹配由数字、26个英文字母或者下划线组成的字符串 |