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

Regex, FreeSWITCH, match to group #1 second group

我想匹配 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 - returns false,所以很好)

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

有什么办法,组一样吗?据我了解,FreeSWITCH 中没有命名组,尽管我可能错了

作弊:

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

不过,如何在一种正则表达式条件下做到这一点仍不清楚。

虽然我更喜欢这种方式在配置中,因为它不那么书呆子而且更容易理解

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

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

^(aaaaaa|bbbbbb)$

这样,您将有一个 $1 变量,值为 "aaaaaa" 或 "bbbbbb"(将匹配什么:)

您可以使用 branch reset group:

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

随着 FreeSWITCH 的管道转义:

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

现在您可以将任一组称为 </code>(或 FreeSWITCH 中的 <code>%1)。快速浏览文档告诉我他们使用 PCRE 库,所以这应该有效。但我确信有更好的方法可以做到这一点(包括 中的方法)。