+Expression
本文列举一些便利的正则表达式。在FreeSwitch的世界里,正则表达式的身影随处可见。这份文档里有很多实例,说明XML拨号方案的条件表达式里是怎样使用正则表达式的,有兴趣的话可参考。
圆括号里的模式匹配时,其值会按顺序转储到变量里,变量名$1, $2......而变量$0包含完整的pattern值。
下面表达式匹配所有免费号码:
^(+?1)?(8(00|44|55|66|77|88)[2-9]d{6})$
这时,8005551212 、 18005551212 或 +18005551212 都能匹配成功,而$2的填充值都是"8005551212"。
下面挨个字符给出详细解释:
下面表达式匹配七位电话号码
^(d{7})$
比如说,5551212
将匹配成功,这时$1
的值为"5551212";而95551212将匹配失败,因为长度太长;555121A也将匹配失败,因为规则不允许出现字母。
下面表达式匹配十位电话号码
^(d{10})$
比如说,8005551212
将匹配成功,这时$1
的值为"8005551212 ";而18005551212 将匹配失败,因为长度太长。
^(d{11})$
比如说,18005551212
将匹配成功,这时$1
的值为"18005551212 ";而8005551212 将匹配失败,因为长度太短。
^9(d{11})$
比如说,918005551212
将匹配成功,这时$1
值为"18005551212";而8005551212 将匹配失败,因为长度太短。
(^d{4}$|^d{3}$)
比如说,1001将匹配成功,这时$1
值为"1001";102也将匹配成功,
这时$1
值为"102";*9999将匹配失败;*98也将匹配失败。
(^d{3,5}$)
比如说,10010
将匹配成功,这时$1
值为"10010";102也将匹配成功,
这时$1
值为"102";*9999将匹配失败;*98也将匹配失败。
下面表达式表示前缀 '9',后跟的数字位数是可变的:
^9(d+)$
比如说,977
将匹配成功,这时$1
值为"77";877将匹配失败;966736 将匹配成功,
这时$1
值为"66736";9118299983 将匹配成功,这时$1
值为"118299983";9将匹配失败,因为加号+表示至少一位。
<extension name="international" continue="true"><!--^+(1| # NANPA2[1-689]d| # 21X,22X,23X,24X,25X,26X,28X,29X2[07]| # 20, 273[0-469]| # 30,31,32,33,34,36,393[578]d| # 35X,37X,38X4[0-13-9]| # 40,41,43,44,45,46,47,48,4942d| # 42X5[09]d| # 50X, 59X5[1-8]| # 51,52,53,54,55,56,57,586[0-6]| # 60,61,62,63,64,65,666[7-9]d| # 67X,68X,69X7|8[035789]d| # 80X,83X,85X,87X,88X,89X8[1246]| # 81,82,84,869[0-58]| # 90,91,92,93,94,95,989[679]d # 96X,97X,99X)(d+)--><condition field="destination_number" expression="^+(1|2[1-689]d|2[07]|3[0-469]|3[578]d|4[0-13-9]|42d|5[09]d|5[1-8]|6[0-6]|6[7-9]d|7|8[035789]d|8[1246]|9[0-58]|9[679]d)(d+)"><action application="set" data="country_code=$1"/><action application="set" data="national_number=$2"/></condition>
</extension>
^(+1|1)?([2-9]dd[2-9]d{6})$
比如说,+13172222222将匹配成功;而13172222222依然会匹配成功;而3172222222还是会匹配成功,这是因为前缀+1或1是可选的;317122222将匹配失败,这不是合法NANPA号码。
^(?:1)?([2-9]d{2}[2-9]d{6})(?:;npdi=(?:yes|no))?(?:;rn=([2-9]d{2}[2-9]d{6}))?(?:;npdi=(?:yes|no))?
实例:
|
实例:
|
有时候,你需要用圆括号对一系列选择进行分组,但是你对保存匹配的结果并不感兴趣。为了达成这个目的,你可以用问号加冒号组合。下面的实例,匹配前缀"+"或"00",但并不保存匹配的信息。第二组圆括号的匹配信息是有保存的。
^(?:+|00)(d+)$
比如说:+13171222222将匹配成功,这时$1的值为13171222222;而0013171222222也将匹配成功,这时$1的值还是13171222222。
下面这个实例,把匹配的结果分成前缀和电话号码两部分,分别存储在变量$1和$2里。
^(+|00)(d+)$
比如说,+13171222222匹配成功,这时$1的值为+,$2的值为13171222222; 0013171222222也匹配成功,这时$1的值为00,$2的值为13171222222。
圆括号可以嵌套。如果需要区分匹配的信息与变量的关系,可以从左到右展开圆括号。第一个开放的圆括号的信息存储为$1,第二个开放的则存储为$2,依此类推。
^((+|00)(d+))$
比如说,+13171222222匹配成功,这时$1值为+13171222222,$2值为+, $3值为13171222222; 0013171222222匹配成功,这时$1值为0013171222222,$2值为00, $3值为13171222222
下面再举个例子:不存储第一对圆护括号的匹配信息:
^(?:(+|00)(d+))$
比如说:+13171222222匹配成功,这时$1值为+, $2值为13171222222; 0013171222222也匹配成功,这时$1值为00, $2值为13171222222。
^rn=(.*);
比如说:rn=1234567890;匹配成功,这时$1值为1234567890;npdi
如果你的表达式里用的是.*?,那么将不会执行贪婪匹配(如果你匹配的是一个数字,也可以用d来描述)
^rn=(.*?);
比如说,rn=1234567890;npdi;匹配成功,这时$1值为1234567890
匹配时,如果对大小写不敏感,那么可以在匹配串加上前缀 (?i)
比如说:
(?i)restricted
这时,Restricted
和restricted均会匹配成功。
正则表达式是很严肃的事情。它们在计算机世界中用处很大。如果想进一步了解正则相关知识,这里给出一些相关的资源链接:
.aspx
/
/
.aspx
.htm
/
.html
请参考:
还可以使用下面的perl脚本测试正则表达式,或者根据需要对进行调整。
#!/usr/bin/perl
$x=$ARGV[0];if($x=~/^(+1|1)?([2-9]dd[2-9]d{6})$/)
{print "Input: $xn";print "$1 Output: ".$1."n";print "$2 Output: ".$2."n";
}
测试
|
|
在fs_cli 执行regex API命令进行正则匹配。
正则表达式备忘录:
本文发布于:2024-02-02 22:02:16,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170688253646725.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |