正则表达式,FreeSWITCH,匹配组#1第二组

时间:2015-02-09 17:40:25

标签: regex freeswitch

我想匹配NA号码或4443(voip测试)

NA号是经典的,无需考虑这个:

^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$

第二部分更容易:

^(4443)$

完整序列:

^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$\|^(4443)$

有一些边缘测试序列,包括14443(可选[+]1前缀和4443 - 返回false,因此很好)

问题是,如果我得到NA号码,则返回%1(第一组) 如果输入为4443,则为第二组。

有没有办法,这个小组是一样的?据我所知,FreeSWITCH中没有命名组,但我可能错了

3 个答案:

答案 0 :(得分:2)

作弊:

   <condition regex="any">
       <regex field="destination_number" expression="^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$"/>
       <regex field="destination_number" expression="^(4443)$"/>

但是,如何在一个正则表达式条件下进行此操作仍然不清楚。

我更喜欢这种方式,因为它不那么讨厌,更容易理解

答案 1 :(得分:0)

试试这个:^(?:+?1)?([2-9] \ d \ d [2-9] \ d {6} | 4443)$

但是,我不认为第一个序列是正确的。因为每对(..)都是$ ..变量。所以(?:+?1)为1美元,[2-9] \ d \ d [2-9] \ d {6}或者4443为2美元。 我的想法是将整个序列放在一对括号中,如下所示:

^(AAAAAA | BBBBBB)$

有了这个,你将有一个$ 1变量,值为“aaaaaa”或“bbbbbb”(将匹配的内容:)

答案 2 :(得分:0)

您可以使用branch reset group

(?|^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$|^(4443)$)

为FreeSWITCH转出管道:

(?\|^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$\|^(4443)$)

现在,您可以将任一组称为$1(或FreeSWITCH中的%1)。快速浏览文档告诉我他们使用PCRE库,所以这应该工作。但我确信有更好的方法可以做到这一点(包括Vetal's answer中的那个)。