正则表达式可以很方便地进行复杂的字符串匹配,记录一下正则表达式的规则以备查询。
基本语法
正则表达式一般包含普通字符,特殊字符和限定符。
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
特殊字符是正则表达式里有特殊含义的字符,也是正则表达式的核心匹配语法。
限定符用来指定正则表达式的一个给定的组件必须要出现多少次才能满足匹配。
对其中的部分字符做一介绍:
选择:
- 竖线
|
表示选择,优先级最低。例如:表达式gray|grey
可以匹配字符串grey
或者gray
。
数量限定:
某个字符后的数量限定符用来限定前面这个字符允许出现的个数。最常见的数量限定符包括+
、?
和*
(不加数量限定则代表出现一次且仅出现一次):
- 加号
+
代表前面的字符必须至少出现一次。(1次或多次)。例如,goo+gle
可以匹配google
、gooogle
、goooogle
等; - 问号
?
代表前面的字符最多只可以出现一次。(0次或1次)。例如,colou?r
可以匹配color
或者colour
; - 星号
*
代表前面的字符可以不出现,也可以出现一次或者多次。(0次、1次或多次)。例如,0*42
可以匹配42、042、0042、00042
等。
改变优先级:
- 圆括号
()
可以用来定义操作符的范围和优先度。例如,gr(a|e)y
等价于gray|grey
,(grand)?father
匹配father
和grandfather
。
上述这些构造子都可以自由组合,精确的语法可能因不同的工具或程序而异。
特殊字符表和限定符表
特殊字符表:
特别字符 | 描述 |
---|---|
|
匹配输入字符串的结尾位置。 |
( ,) |
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。 |
* |
匹配前面的子表达式零次或多次。 |
+ |
匹配前面的子表达式一次或多次。 |
. |
匹配除换行符 \n 之外的任何单字符。 |
[ |
标记一个中括号表达式的开始。 |
? |
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。 |
\ |
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, n 匹配字符 n 。\n 匹配换行符。序列 \\ 匹配 '\' 字符,而 \( 则匹配 '(' 字符。 |
^ |
匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。 |
{ |
标记限定符表达式的开始。 |
| |
指明两项之间的一个选择。 |
限定符表:
字符 | 描述 |
---|---|
* |
匹配前面的子表达式零次或多次。例如,foo* 能匹配 fo 以及 foooo 。* 等价于{0,} 。 |
+ |
匹配前面的子表达式一次或多次。例如,foo+ 能匹配 foo 以及 foooo ,但不能匹配 fo 。+ 等价于 {1,} 。 |
? |
匹配前面的子表达式零次或一次。例如,Your(s)? 可以匹配 Your 或 Yours 中的Your 。? 等价于 {0,1} 。 |
{n} |
n 是一个非负整数。匹配确定的 n 次。例如,o{2} 不能匹配 for 中的 o ,但是能匹配 foo 中的两个 o 。 |
{n,} |
n 是一个非负整数。至少匹配 n 次。例如,o{2,} 不能匹配 for 中的 o ,但能匹配 foooooo 中的所有 o 。o{1,} 等价于 o+ 。o{0,} 则等价于 o* 。 |
{n,m} |
m 和 n 均为非负整数,其中 n 小于等于 m 。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 foooooo 中的前三个 o 。o{0,1} 等价于 o? 。注意,在逗号和两个数之间不能有空格。 |
优先级
优先级 | 符号 |
---|---|
最高 | \ |
高 | () 、(?:) 、(?=) 、[] |
中 | * 、+ 、? 、{n} 、{n,} 、{n,m} |
低 | ^ 、 、中介字符 |
次最低 | 串接,即相邻字符连接在一起 |
最低 | | |
文章评论
配图好评