简介
本文档介绍正则表达式(regex)如何工作,以及如何在expressway服务器中测试正则表达式。
先决条件
要求
Cisco 建议您了解以下主题:
- 视频通信服务器(VCS)和Expressway服务器
- 网真设备
- 企业到企业(B2B)呼叫
- 协作部署
使用的组件
本文档中的信息基于以下软件和硬件版本:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
正则表达式是定义用于匹配文本中字符串的模式的字符序列。然后,可以在搜索规则或转换中修改或保留这些字符串,这些字符串是正则表达式的最常见用途。
正则表达式的类型
基本表达式
- 点(.)匹配任意单个字符。
- 数字(\d)匹配任何单个十进制数字。
- 星号(*)匹配前面字符或表达式的0次或更多次重复。
- 加号(+)匹配1个或更多重复的前一个字符或表达式。
- 问号(?)匹配0或1个重复的前一个字符或表达式。
- 大括号{n}匹配前面字符或表达式的n个重复,例如(\d{3})匹配任意3位字符串。
- 大括号范围{n,m}匹配n到m个重复的前一个字符或表达式,例如,(\d{3,5})匹配任意3位、4位或5位字符串。
- 方括号[...]匹配一组指定字符,这些字符可单独指定或在一定范围内指定,例如[abc]匹配字符a、b或c。
- 要指定范围,请使用范围开始和结束之间的连字符(-),例如,[a-z]匹配任意字母字符。
- 在左括号后面使用脱字符(^)可反转匹配,例如,[^a-z]匹配任何非字母字符。
- 括号(...)对一组匹配字符进行分组。以后可以使用字符\n作为替换字符串的一部分按顺序引用这些组。
- 管道(|)与一个或替代表达式匹配,例如,(com|net)匹配字符串com或net。
其他表达式
- (?!...)这是一个负面展望。 定义不得存在的子表达式。
- %localdomains%匹配服务器上当前配置的所有SIP域。
创建并测试模式
Expressway服务器提供无需更改配置即可测试模式的工具,以避免创建新项目时可能产生的业务影响。
可以在Expressway服务器的Web界面上找到此工具,导航到维护>工具>检查模式。
检查图案工具
- 别名:要测试的字符串,它可以是目标或注册统一资源标识符(URI)。将此字符串与模式字符串进行比较,以测试是否匹配。
- Pattern type:此设置确定选中模式时如何处理模式字符串。Regex最常用。
- Exact:整个字符串必须与字符的别名字符完全匹配。
- 前缀:字符串必须出现在别名的开头。
- 后缀:字符串必须出现在别名的末尾。
- 正则表达式:该字符串被视为正则表达式。
- 模式字符串:比较别名的模式。
- 模式行为:对模式匹配执行的操作。如果要执行修改,则会启用新的文本框以指定修改。
- 删除:从别名中删除匹配的前缀或后缀。仅在模式类型设置为前缀或后缀时可用。
- 保留:未对别名应用任何修改。
- 替换:用替换字符串中的文本替换别名的匹配部分。
- Add Prefix:将附加文本附加到别名前面。
- 添加后缀:将附加文本附加到别名。
常用正则表达式示例
匹配所有通配符
当不需要特定模式匹配,但需要考虑搜索规则或转换时,此模式被广泛使用,无论格式或长度如何,正则表达式(.*)都会匹配任何输入。圆点匹配任意字符,星号表示该表达式的任意重复量。
Match Everything通配符示例1
无论别名输入如何,同一模式都会成功。
Match Everything通配符示例2
匹配本地域和非本地域
这通常用于将模式与服务器上配置的某个本地域的目标相匹配,并保持呼叫在本地路由,而不是路由到互联网。正则表达式%localdomains%可以用作后缀或正则表达式模式的第二部分。
要配置本地域,请导航到配置>域。
本地配置的域
除本地配置的域外,任何域的模式匹配均失败。
本地域匹配失败
并且对于任何本地配置的域都会成功。
本地域匹配成功
此模式之前的负面展望(?!.*@%localdomains%)也可用于相反的结果。这意味着不是本地域的任何别名都是成功的匹配。
本地域的负面展望
匹配不同的域扩展
此模式通常用于公司拥有具有多个分机的域并允许其中一个分机被呼叫时,但对于呼叫管理,在考虑搜索规则之前,需要对这些分机进行规范化。
这通常通过使用管道(|)正则表达式通过转换来完成。
不同的域扩展示例1
相同的模式使用两个域扩展中的一个来匹配域,但是会将其转换为所选择的规范化扩展。
不同的域扩展示例2
匹配话费诈骗模式
话费诈骗呼叫的共性通常在于所拨打的数字的数量,国际呼叫需要国家代码,后跟所呼叫的电话号码,导致这些呼叫至少有7位数字。公司内部拨号方案的长度通常为4到6位左右。
这就会产生一个明显的差异,可用于对其中任一类型的呼叫采取不同的操作。使用数字计数regex,您可以指定要对每个呼叫执行的操作。
数字计数示例1
此模式仅匹配7到15位之间的任何别名。数字越少,匹配结果越好。
数字计数示例2
除数字之外的任何其他字符也会导致失败。
数字计数示例3
组和引用模式
组和引用与正则表达式模式一起使用来修改别名的某些部分,同时保留其他部分,这在添加或删除前缀或修改域时非常有用。在模式字符串部分指定组,并在replace string字段中按顺序完成引用。
组和引用示例1
在本示例中,有一个与@cisco.com的文字匹配,testuri字符串由match all regex进行匹配和分组。
替换字符串中的\1引用回调模式字符串中的第一个组,该组链接到URI,而不论URI是什么,因此URI在结果别名中保存。
在替换的字符串中未引用域,而是由internaldomain替换,这在结果别名中可见。
组还可用于对URI进行重新排序,因为这支持灵活的拨号方案。
组和引用示例2
在本示例中,别名格式为5位,后跟一个点和另一个数字,然后是域。
在模式字符串中,可以分别分析不同的组和部分。
- 组1,模式(\d{5})匹配字符串开头的任意5位数字。
- 正则表达式(\.)与文字点匹配,这意味着原始别名要求在5个初始数字后使用一个点。
- 在第2组,模式(\d)匹配单个数字。
- 第3组,文字模式(@cisco.com)仅与该字符序列匹配,可以进一步修改以包含多个域或前面匹配之后的任何字符串。
一旦别名与模式字符串匹配,该操作就会使其被替换字符串替换。
替换字符串以新顺序引用之前的组。
- 引用\2回拨组2,这是点号后和域前的单个数字。
- 引用\1回拨组1,这是别名的前5位。
- 引用\3回拨组3,这是别名的域部分
- 该点从未被引用,也不是任何组的一部分,因此不是结果别名的一部分。
然后,别名产生的数字与原始别名的数字相同,但最初是在别名的开头点之后的数字。
将5个数字与单个数字分隔开的点不再是别名的一部分,域将被保留。
并非每个组都需要引用,未引用的组不是结果别名的一部分。
相关信息
思科技术支持和下载