正则表达式有12个元字符:【$()*+.?[\^{|】
如果不包含这12个字符,就说不上是正则表达式。另外 “]” 和 “}” 也算是元字符。
在正则表达式中,要匹配这12个元字符,有两种方法
- "\"进行转义。例如: 【\$\(\)\*\+\.\?\[\\\^\{\|】
- 用<\Q>和<\E>标签。 例如 【\Q...\E】 就等同于 【\.\.\.】, 能够匹配 【...】。不过只有 Perl、PCRE、Java6支持\Q 和 \E 标签
大小写不敏感匹配:在字符串前后分别加上【(?i)】【(?-i)】
eg: 表达式【sensitive(?i)caseless(?-i)sensitive】能够匹配字符串【sensitiveCaseLESSsensitive】
匹配多个字符中的一个:用【[]】
eg:表达式【[0-9]】就可以匹配到0到9之间的所有的数字。
表达式【[^0-9]】可以匹配出不属于0到9之间字符
通过连接符【-】设置指定的范围,【-】前面的字符和后面的字符构成一个区间,该区间范围是根据ASCII字符表或者Unicode 字符表设定的。
- 【\d】匹配所有数字机相当于【[0-9]】
- 【\D】匹配所有的非数字,相当于【[^\d]】
- 【\w】匹配一个的单词字符,相当于【[a-zA-Z0-9_]】
- 【\W】是【\w】的补集
- 【\s】匹配任意whitespace。包括:space/tab/line break
- 【\S】匹配【\s】的补集
匹配以某字符串开始的字符串:在开始字符串钱加上【^】或者【\A】
eg:【^alpha】匹配以alpha开始的字符串,等同于【\Aalpha】
匹配以某字符串结束的字符串:在结束字符后加上【$】或者【\Z】
eg:【alpha$】匹配以alpha结束的字符,等同于【alpha\Z】
javascript 不支持 \A
开启多行模式:在字符串前加上【(?m)】
边界匹配:在字符串前后加上【\b】标签,则只能匹配到\b之间的字符。
eg:表达式【\bcat\b】只会匹配【cat】不会匹配到【category】
表达式【\bcat】只会匹配以【cat】开始的字符串,等同于【^cat】标签。
非边界匹配:在字符串前后加上【\B】标签,它的意义与【\b】标签意义相反。
eg: 表达式【\Bcat\B】只会匹配【cat】前后还有其他单词字符的字符串。不能匹配【cate】/【ecat】/【my cat is】,只能匹配到【ecate】这样的字符串。
匹配几个字符串中的一个:在字符串间加上【|】。
eg: 当你用正则表达式【Mary|Jane|Sue】查找字符串【Mary, Jane, and Sue went o Mary‘s house】,第一次找到的是Mary,查找下一个是Jane,然后会是Sue,最后是Mary。
解释一下:【|】的效果是在目标字符串中查找用【|】连接的字符串,找到一个后,就在剩余的字符串中再继续查找。
首先会在【Mary, Jane, and Sue went o Mary‘s house】匹配到Mary, 接下来就会在剩余的字符串【, Jane, and Sue went o Mary‘s house】查找【Mary|Jane|Sue】的匹配结果。
再次匹配之前匹配的字符串:
eg: 要匹配形如日期表示字符串 【2008-08-08】,就是年份的后两位、月份、日子这三个数字相同。
正则表达式:【\d\d(\d\d)-\1-\1】
能够匹配得字符串:2008-08-08/ 2007-07-07
解释:在正则表达式中,()内的匹配结果作为一个group,第一个()匹配的结果是group1, 第二个()匹配的结果是group2, 以此类推。在正则表达式后可以用【"\" + 数字】 的形式表示匹配对应的group。例如【\1】表示匹配group1, 【\2】表示匹配group2,以此类推。