我想匹配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中没有命名组,但我可能错了
答案 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中的那个)。