2.5. 修饰匹配次数的特殊符号
前面章节中讲到的表达式,无论是只能匹配一种字符的表达式,
还是可以匹配多种字符其中任意一个的表达式,都只能匹配一次。
如果使用表达式再加上修饰匹配次数的特殊符号,那么不用重复书
写表达式就可以重复匹配。
使用方法是:"次数修饰"放在"被修饰的表达式"后边。比如:
"[bcd][bcd]" 可以写成 "[bcd]{2}"。
表达式 作用
{n}
表达式重复 n 次,比如:"/w{2}" 相当于 "/w/w";
"a{5}" 相当于 "aaaaa"
{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"。
3.