简介
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
语法
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。
非打印字符
-
\cx
匹配Control-x -
\f
匹配一个分页符 -
\r
匹配一个回车Return -
\n
匹配一个换行 -
\t
匹配一个制表符tab -
\v
匹配一个垂直制表符 -
\s
匹配任何空白字符,包括空格、换行、制表符、分页,等价于[\r\n\f\v\t]
-
\S
匹配任何非空白符,等价于[^\r\n\f\v\t]
特殊字符
特殊字符具有特殊含义,若要使用这些字符的普通字符,需要进行转义,如要匹配 $
符号,需要使用 \$
-
$
匹配输入字符串的结尾位置 -
()
标记一个子表达式的开始和结束位置 -
*
匹配前面的子表达式0次或多次 -
+
匹配前面的子表达式1次或多次 -
.
匹配除换行符\n
之外的任何字符 -
[
标记一个中括号表达式的开始 -
?
匹配前面的子表达式0次或1次 -
\
转义字符 -
^
匹配输入字符串的开始位置,在中括号内使用时表示非,即不包含中括号内的任何字符 -
{
标记限定表达式的开始 -
|
指明两项之间的一个选择
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
-
*
0次或多次,等价于{0,}
-
+
1次或多次,等价于{1,}
-
?
0次或1次,等价于{0,1}
-
{n}
n次 -
{n,}
大于等于n次 -
{n,m}
大于等于n次,且小于等于m次,此表达式不能有空格
定位符
定位符用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界
-
^
匹配输入字符串开始的位置 -
$
匹配输入字符串结束的位置 -
\b
匹配一个字边界,字与空格之间的位置 -
\B
匹配非字边界
注意: 不能把限定符与定位符一起使用
运算符优先级
转移符\
> 圆括号和方括号 (), (?:), (?=), []
> 限定符 *, +, ?, {n}, {n,}, {n,m}
> 定位点和序列 ^, $, \任何元字符、任何字符
> 替换,或 |
简单示例
-
^haha
以haha开头 -
haha$
以haha结尾 -
^haha$
匹配haha字符串 -
haha
匹配任何包含haha的字符串 -
[A-Za-z0-9@_]
字母数字@_字符集中的一个 -
^[a-z][0-9]$
小写字母开头第二位是数字的两位字符串 -
[^a-z]
除小写字母以外的字符串 -
^a{4}$
aaaa -
^a{2,4}$
aa或aaa或aaaa -
^[1-9][0-9]*$
所有的正整数 -
^\-{0,1}[0-9]{1,}$
所有的整数 -
^\-?[0-9]{1,}\.?[0-9]{1,}$
所有的浮点数 -
^(A|B)
以A或B开头,但是会保存,按照第一次来匹配 -
^(?:A|B)
以A或B开头,不会保存 -
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/
将一个URL解析为协议、域、端口及相对路径 -
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/
匹配 HTML 标记