正则表达式 (regular expression描述了一种字符串匹配的模式 (pattern),可以用来检查一个串是否含有某种子串将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
例:
runoo+b,+号代表前面的字符必须至少出现一次
可匹配runout、runooob、runooooob但不能匹配“runo”
runoo*b,*号代表字符可以不出现,也可以出现一次或者多次
可匹配runob、runco、runooooob
colou?r,?号代表前面的字符最多只可以出现一次
可匹配color、colour
正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为"元字符")组成的文字模式。
普通字符
包括所有大小写字母、所有数字、所有标点符号和一些其他符号。
非打印字符
非打印字符 | 描述 |
---|---|
cx | 匹配由x指明的控制字符。例,cM匹配一个control-M或者回车符。x的值必须为A-Z或a-z之一。否则视为一个原义的’c‘字符 |
f | 匹配一个换页符。等价于x0c和cL。 |
n | 匹配一个换行符。等价于x0a和cJ。 |
r | 匹配一个回车符。等价于下x0d和cM。 |
s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ fnrtv] |
S | 匹配任何非空白字符。等价于[^ fnrtv] |
t | 匹配一个制表符。等价于x09和cl。 |
v | 匹配一个垂直制表符。等价于x0b和cK。 |
特殊字符
顾名思义,具有特殊含义的字符。
如果要查找字符串中的特殊字符,则需要对其转义,即将反斜杠字符放在它们前面
特殊字符 | 描述 |
---|---|
$ | 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则 也 匹 配 ′ n ′ 或 ′ r ′ 。 要 匹 配 也匹配'n'或'r'。要匹配 也匹配′n′或′r′。要匹配字符本身,请用$。 |
() | 标记一个子表达式的开始和结束的位置。子表达式可以获取供以后使用 |
* | 匹配前面的子表达式0次或者多次 |
+ | 匹配前面的子表达式一次或者多次 |
. | 匹配除换行符n之外的任何单字符。 |
[ | 标记一个中括号表达式的开始 |
? | 匹配前面的子表达式0次或者一次,或指明一个非贪婪限定符。 |
^ | 匹配输入字符串的开始位置,除非在括号表达式中使用,此时它表示不接受该字符集合 |
{ | 标记限定符表达式的开始。 |
I | 指明两项之间的一个选择 |
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n, }或{n,m}共6种。
字符 | 描述 |
---|---|
* | 匹配前面的子表达式0次或者多次。等价于{0,} |
+ | 匹配前面的子表达式一次或者多次。等价于{1,} |
? | 匹配前面的子表达式0次或者一次。等价于{0,1} |
{n} | n是一个非负整数,匹配确定的n次。例如不能匹配“Bob”能匹配“food” |
{n,} | n是一个非负整数,至少匹配n次。‘o{1,}’等价于‘o+’。’o{0,}'等价于‘o*’ |
{n,m} | 其中m,n都为非负,n<=m。最少n次最多m次 |
定位符
定位符使能够将正则表达式固定到行首或行尾
还能使能够创建这样的正则表达式
定位符用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,b描述单词的前或后边界,B表示非单词边界
字符 | 描述 |
---|---|
^ | 匹配输入字符串开始的位置。 |
$ | 匹配输入字符串结尾的位置 |
b | 匹配一个单词的边界,即字与空格间的位置。 |
B | 非单词边界匹配。 |
注意:不能将限定符与定位符一起使用,由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置
若要匹配一行文本开始处的文本,请在正则表达式的开始使用字符。不要将^的这种用法与中括号表达式内的用法混淆。
若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用$字符若要在搜索章节标题时使用定位点
运算符优先级
从左到右进行计算,并遵循优先级顺序,下表从高到低
运算符 | 描述 |
---|---|
/ | 转义符 |
(),(?:),(?=),[] | 圆括号和方括号 |
*,+,?,{n},{n,},{n,m} | 限定符 |
^,$,任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
I | 替换,“或”操作,若要匹配“mood”或“food”,从而产生“(m |