正则表达式分为元字符和文字。正则表达式的元字符拥有非常强大的描述能力。
行的起始和结束
- 脱字符号^(代表一行的开始)
- 美元符号$(代表一行的结束)
^cat //匹配以cat开头的行
cat$ //匹配以cat结尾的行
字符组
- [ ](用来匹配若干字符之一)
- [^ ](用来匹配除若干字符以外的字符之一)
用来匹配若干字符之一,主要这句话的两个限定词,"字符"和“之一”。每个中括号只匹配一个字符,被匹配的字符位置是中括号中字符的其中一个。注意:[]还支持匹配范围,例如[0-9]可以匹配0-9之间的数字,但是注意-不能放在[]开始的位置 ,那样-会被当做字符来处理。
gr[ea]p //grep或者grap都可以被匹配
匹配任意字符
- .(匹配任意字符)
正则表达式是用来匹配任意字符的符号是英文状态下的一个点。(在linux下处理文件时,通常会用*来匹配文件名。或者写sql时,会用select * 用于查询全部字段,有时也用于而在正则表达式里,)
03.19.23 //03-19-23或者03/19/23都可以被匹配
多选结构
- | (或)
将不同的子表达式组合成一个总表达式。只要能够匹配任意一个表达式。子表达式又被称作多选分支。
//匹配grey或者gray的几种写法:
grey|gray
gr(e|a)y
gr[ea]y
//注意:gr[e|a]y这种写法时,|并没有作为“或”的意思,而是作为了一个可选字符。
单词分界符
- \< (匹配单词的开头,可以理解为单词版的^)
- \>(匹配单词的结束,可以理解为但此版的$)
单词分界符用于解决:“期望匹配的单词包含在另一个单词中”。注意:<和>并不是元字符,只有他们跟\结合起来时,才具有相应的意义。 <和\>也被叫做“元字符序列”。
\<cat //匹配以cat开头的单词
初步总结前面提到的元字符
下面继续列举元字符:
量词(quantifiers)
- ?(可选项,把?放在一个字符后面,表示无论这个字符是否出现都可以被匹配。)
- +(计数,紧邻元素出现一次或多次)
- *(紧邻元素出现任意次,也可以不出现)
- {min,max}(计数区间,可以设置重复次数)
colou?r //可以匹配color或者colour
[a-zA-Z]{1,5} //匹配出现1-5个字母
转义字符
- \
用于解决匹配的字符本身是元字符的情况。
\. //用于匹配字符点。
一些小例子
匹配由字母、数字、下划线组成的字符串,但是不能以数字开头[a-zA-Z_][a-zA-Z0-9_]*
匹配双引号内的字符串"[^"]*"
匹配美元金额\$[0-9]+(\.[0-9]*)?