1.非打印字符f
v s S
f 匹配一个换页符
匹配一个换行符
匹配一个水平制表符
v 匹配一个垂直制表符
匹配一个回车符
s 匹配任何空白字符,包括空格、制表符、换页符等。 等价于[ f
v
] 注意f前面有个空格。
S 匹配任何非空白字符。等价于[^ f
v
]
2.限定符,限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{,m}或{n,m}共7种。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
? 匹配前面的子表达式零次或一次。
{n} 匹配确定的 n 次。n是一个非负整数。
{n,} 至少匹配n 次。n是一个非负整数。
{,m} 至多匹配m次。m是一个非负整数。
{n,m} 最少匹配 n 次且最多匹配 m 次。n和m均为非负整数,其中n <= m。
3.定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
^ 匹配输入字符串开始的位置。
$ 匹配输入字符串结尾的位置。
^$ 匹配空白行
匹配一个字边界,即字与空格间的位置。<为左边界,>为右边界
B 非字边界匹配。
4.特殊字符就是一些有特殊含义的字符。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
. 匹配除换行符
之外的任何单字符。要匹配 .,请使用 。
[] 标记一个中括号表达式的开始和结束。要匹配 [ ],请使用 [ 、]
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'
' 匹配换行符。序列 '\' 匹配 "",而 '(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。
{ } 标记限定符表达式的开始和结束
| 指明两项之间的一个选择。要匹配 |,请使用 |。
5.选择和反向引用
用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。
其中?:是非捕获元之一,还有两个非捕获元是?=和?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 '
' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
可以使用非捕获元字符 '?:'、'?=' 或 '?!' 来重写捕获,忽略对相关匹配的保存。
反向引用的最简单的、最有用的应用之一,是提供查找文本中两个相同的相邻单词的匹配项的能力。
6. 运算符优先级正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:
转义符 (), (?:), (?=), 圆括号和方括号 *, +, ?, {n}, {n,}, {,m},{n,m} 限定符 ^, $, \,任何元字符、任何字符 定位点和序列(即:位置和顺序) | 替换,"或"操作字符具有高于替换运算符的优先级。