忽略大小写
如果单纯用正则表达式实现对大小写敏感或忽略的匹配模式是完全可以实现的。但对于通常的问题解决来说未免太麻烦了。目前很多工具软件都提供相关功能设定。也就是说是否忽略大小写的功能完全没有必要成为正则表达式的语言的一部分。
使用各种语言或工具中使用参数 i 就表示忽略大小写的匹配,否则就是对大小写敏感的匹配。
如在Javascript中可以这样设定:var myReg=/[.][0-9a-z]+$/i; 该表达式将可用来匹配文件名的扩展名,如:.mp3 , .doc , .html等,如果不使用i做忽略大小写的设定,必须改为:var myReg=/[.][0-9a-zA-Z]+$/i;
单词分界符
顾名思义就是单词的起始点和结束点,目的就是防止匹配的目标出现在另外一个单词内。
/< 开始分界符
/> 结束分界符
例子:想在目标文本中查找cat,如果用表达式 cat 来匹配能够找到所有的cat,但是也会找到不是预期的结果,如category等。利用单词分界符可以很好地解决这个问题。/<cat/> 该表达式只匹配cat,如果想匹配以cat开头或结尾的单词可以这样:/<cat 匹配开头为cat的单词,cat/> 匹配结尾为cat的单词。
注意:单词分界符并不是智能到认识英语单词,而只是限定一个连续的字符串而已。可惜并不是所有的工具或语言都支持单词分界符。
小结一下:
目前所涉及到的元字符:
. 任意单个字符
[...] 列出的任意字符
[^...] 未列出的任意字符
^ 行的开始位置
$ 行的结束位置
/< 单词的开始位置
/> 单词的结束位置
| 匹配分隔两边的任意表达式
(...) 限制竖线(|)的作用范围
可选项元素
颜色在英语中有两种写法:color,colour 如果想把他们全部从目标文本中找出来可使用表达式:(color|colour) 或者 col(o|ou)r 或者 colo(ur|r) 等等。
现在我们多了一种选择——利用元字符(?)也能解决这个问题,而且更直接简便。
colou?r
u?表示此处可以出现u也可以不出现,两种情况都是匹配的预期结果。
所以元字符(?)代表可选项,只作用于前面紧邻的元素,注意:这里说的是元素,而没说是字符,当然目前的例子是匹配字符,字符当然是元素,所以推而广之?之前可以紧邻的元素也应该包括表达式,这恰恰是可选元素的强大功能所在。
如果?要作用于表达式,则该表达式必须用()限定成为一个元素,如:July?(fourth|4(th)?) 匹配七月四日可能被写成的格式:
- July 4
- Jul 4
- July fourth
- Jul fourth
- Jul 4th
- July 4th
其他量词:重复出现
+ (加号)和 * (星号)的作用与问号类似。他们都对前面近邻的元素进行数量上的限定。
? 表示可有可无,但如果有数量必须是一个
+ 表示至少有一个以上
* 表示从无到有到多个没有任何数量限定
{min,max} 区间量词,规定重现次数的范围
(待续)