注意:很多正则表达式的实现并不一定支持这些这些功能,或是实现的方式有变化
一、重复匹配
1、匹配一个或多个字符
2、匹配零个或多个字符要想匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上一个 + 字符作为后缀就行了。
匹配一个字符(或字符集合),该字符可以出现零次或多次,只要给这个字符(或字符集合)加上一个 * 字符作为后缀就行了。
3、匹配零个或一个字符
匹配一个字符(或字符集合),该字符可以出现零次或一次,只要给这个字符(或字符集合)加上一个 ? 字符作为后缀就行了。
4、匹配的重复次数
指定字符(或字符集合)的重复次数:[A-Fa-f0-9]{6} 匹配[A-Fa-f0-9]出现6次
为重复匹配次数设定一个区间: [A-Fa-f0-9]{3,6} 匹配[A-Fa-f0-9]出现最少3次,最多6次
[A-Fa-f0-9]{6,} 匹配[A-Fa-f0-9]出现最少6次
5、防止过度匹配
在没有指定重复次数的上限值时,有事可能会导致过度匹配的现象。
如:
原文: tst1 tst2
正则表达式:.* 匹配结果: tst1 tst2 过度匹配 ,一个结果
出现这种情况的原因: * 和 + 都是所谓的 “ 贪婪型 ” 元字符,在进行匹配时的行为模式是多多益善,会尽可能从一段文本的开头一直匹配到这段文本的末尾。
正则表达式:.*?
匹配结果: tst1
tst2 两个匹配结果
解决办法: 使用懒惰模式,在进行匹配时的行为模式是适可而止,从这段文本的开头匹配碰到第一个匹配时为止。
使用方法: 给贪婪型元字符加上一个 ? 后缀即可
二、位置匹配
1、边界
(1) 单词边界
由限定符\b指定的单词边界
\b 用来匹配一个单词的开始或结尾 \b匹配的是一个位置,这个位置位于一个能够用来构成单词的字符(\w)和一个不能用来构成单词的字符(\W)之间。
例子:
\bcat\b 匹配 cat 单词
\bcat 匹配 cat开头的单词
cat\b 匹配 cat结尾的单词
\B 表明不匹配一个单词边界:即字母数字下划线之间,或者非字母数字下划线之间
(2)字符串边界
^\s*<\?xml.*\?> 匹配xml文件的开头,
^\s* 解决了标签前允许有空格、制表符、换行符等空白字符
[Hh][Tt][Mm][Ll]>\s*$ 匹配