首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex,FreeSWITCH,匹配组#1第二组

Regex,FreeSWITCH,匹配组#1第二组
EN

Stack Overflow用户
提问于 2015-02-09 17:40:24
回答 3查看 376关注 0票数 1

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

NA数是经典的,没有必要去想这个:

代码语言:javascript
复制
^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$

第二部分甚至更容易:

代码语言:javascript
复制
^(4443)$

全序列:

代码语言:javascript
复制
^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$\|^(4443)$

有一些边缘测试序列,包括14443 (可选的[+]1前缀和4443 -返回false,所以它是好的)。

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

有没有办法,这群人是一样的?据我所知,FreeSWITCH中没有命名组,尽管我可能错了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-10 00:30:22

你可以用分支复位组

代码语言:javascript
复制
(?|^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$|^(4443)$)

将管道转义到FreeSWITCH:

代码语言:javascript
复制
(?\|^(?:\+?1)?([2-9]\d\d[2-9]\d{6})$\|^(4443)$)

现在,您可以将任何一个组称为$1 (或FreeSWITCH中的%1 )。快速查看文档会告诉我,它们使用的是PCRE库,所以这应该是可行的。但是,我确信有更好的方法来做到这一点(包括韦特尔的回答中的那种)。

票数 0
EN

Stack Overflow用户

发布于 2015-02-09 18:05:42

作弊:

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

然而,如何在一个正则表达式条件下完成这个任务还不清楚。

不过,我更喜欢这种方式的配置,因为它不那么呆板,更容易理解。

票数 2
EN

Stack Overflow用户

发布于 2015-02-09 18:09:22

试试这个:^(?:+?1)?(2-9\d\d2-9\d\d{6}x4443)$

但是,我不认为第一个序列是正确的。因为每对(..)是一个$。变量。因此,您有$1 (?:+?1),$2用于2-9\d2-d2-9\d{6}或4443。这样做的目的是将整个序列放在一对括号中,如下所示:

^(aaaaaa\bbbbbb)$

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28415892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档