2.5.  修饰匹配次数的特殊符号


前面章节中讲到的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符其中任意一个的表达式,都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号,那么不用重复书写表达式就可以重复匹配。


使用方法是:"次数修饰" 放在 "被修饰的表达式" 后边。


表达式  {n}  重复 n 次

比如:"/w{2}" 相当于 "/w/w";

比如:"a{5}" 相当于 "aaaaa";

比如:表达式 "[bcd][bcd]"   可以写成 "[bcd]{2}"。




表达式 {m,n}  至少重复 m 次,最多重复 n 次,

比如:"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"


表达式  {m,} 至少重复 m 次

比如:"/w/d{2,}"可以匹配"a12","_456","M12344"...


表达式  ?  匹配 0 次或者 1 次,相当于  {0,1}

比如:"a[cd]?"可以匹配 "a","ac","ad"


表达式  +  至少出现 1 次,相当于 {1,}

比如:"a+b"可以匹配 "ab","aab","aaab"...


表达式 *  不出现或出现任意次,相当于  {0,}

比如:"/^*b"可以匹配 "b","^^^b"...


举例 1:

表达式 "/d+/.?/d*" 在匹配 "It costs $12.5" 时,匹配的结果是:成功;匹配到的内容是:"12.5";匹配到的位置是:开始于10,结束于 14。


举例 2:

表达式 "go{2,8}gle" 在匹配 "Ads by goooooogle" 时,匹配的结果是:成功;匹配到的内容是:"goooooogle";匹配到的位置是:开始于 7,结束于 17。



2.6.  其他一些代表抽象意义的特殊符号

一些符号在表达式中代表抽象的特殊意义:

表达式   ^  与字符串开始的地方匹配,不匹配任何字符



表达式  $   与字符串结束的地方匹配,不匹配任何字符


表达式  /b  匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符



进一步的文字说明仍然比较抽象,因此,举例帮助大家理解。


举例 1:

表达式 "^aaa" 在匹配 "xxx aaa xxx" 时,匹配结果是:失败。因为 "^" 要求与字符串开始的地方匹配,因此,只有当 "aaa" 位于字符串的开头的时候,"^aaa" 才能匹配,比如:"aaa xxx xxx"。


举例 2:

表达式 "aaa$" 在匹配 "xxx aaa xxx" 时,匹配结果是:失败。因为 "$" 要求与字符串结束的地方匹配,因此,只有当 "aaa" 位于字符串的结尾的时候,"aaa$" 才能匹配,比如:"xxx xxx aaa"。


举例 3:

表达式 "./b." 在匹配 "@@@abc" 时,匹配结果是:成功;匹配到的内容是:"@a";匹配到的位置是:开始于 2,结束于 4。进一步说明:"/b" 与 "^" 和 "$" 类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是 "/w" 范围,另一边是 非"/w" 的范围。


举例 4:

表达式 "/bend/b" 在匹配 "weekend,endfor,end" 时,匹配结果是:成功;匹配到的内容是:"end";匹配到的位置是:开始于15,结束于 18。



一些符号可以影响表达式内部的子表达式之间的关系:


表达式  |   作用左右两边表达式之间 "或" 关系,匹配左边或者右边


表达式  ( )    有如下作用


(1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰

(2).  取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到


举例 5:表达式 "Tom|Jack" 在匹配字符串 "I'm Tom, he is Jack"时,匹配结果是:成功;匹配到的内容是:"Tom";匹配到的位置是:开始于 4,结束于 7。匹配下一个时,匹配结果是:成功;匹配到的内容是:"Jack";匹配到的位置时:开始于 15,结束于 19。


举例 6:

表达式 "(go/s*)+" 在匹配 "Let's go go go!" 时,匹配结果是:成功;匹配到内容是:"go go go";匹配到的位置是:开始于 6,结束于 14。


举例 7:

表达式 "¥(/d+/.?/d*)" 在匹配 "$10.9,¥20.5" 时,匹配的结果是:成功;匹配到的内容是:"¥20.5";匹配到的位置是:开始于 6,结束于 10。单独获取括号范围匹配到的内容是:"20.5"。