Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql或perl函数以匹配星号拨号计划模式_Php_Mysql_Perl_Asterisk - Fatal编程技术网

Php mysql或perl函数以匹配星号拨号计划模式

Php mysql或perl函数以匹配星号拨号计划模式,php,mysql,perl,asterisk,Php,Mysql,Perl,Asterisk,我有一个旧版本的freePBX(超过5000个扩展,数百个IVR),为了迁移到新版本,我必须记录它。我必须绘制IVR使用哪些树干的地图。为此,我必须将所拨打的号码与出站路由的拨号模式相匹配 表的“extensions”列与我必须匹配的模式类似 19328555 _13XXXX _1933370[0-2] _2805XX _28[3-7]XXX _331XXX _848XXX _85XXXXX _879XXX 例如,我必须找到哪个“扩展”模式与数字8481234匹配,然后才能从另一列获取主干 我

我有一个旧版本的freePBX(超过5000个扩展,数百个IVR),为了迁移到新版本,我必须记录它。我必须绘制IVR使用哪些树干的地图。为此,我必须将所拨打的号码与出站路由的拨号模式相匹配

表的“extensions”列与我必须匹配的模式类似

19328555
_13XXXX
_1933370[0-2]
_2805XX
_28[3-7]XXX
_331XXX
_848XXX
_85XXXXX
_879XXX
例如,我必须找到哪个“扩展”模式与数字8481234匹配,然后才能从另一列获取主干

我知道星号中一定有一个函数

$number='8481234';
$pattern='_879XXX';
    if (asterisk_pattern_match($number,$pattern)) {
       #get trunk column from that row
    }
它可以是SQL、Perl或PHP。我可以写,但我肯定我会重新发明轮子。有人知道这样的函数在哪里吗 可能是?我已经用谷歌搜索了所有我能想到的方法,但是所有的结果都是关于在星号拨号计划中使用MySQL的,这对我来说毫无价值


谢谢

您可以使用以下脚本,结合
dialplan show的结果来查找匹配项extension@context
在Asterisk CLI上运行,这将显示匹配的执行顺序

#!/usr/bin/env perl
use strict;
use warnings;

my $numbers = [
  "8481234", "8581234", "1283123"
];

my $patterns = [
  "19328555" , "_13XXXX"     , "_1933370[0-2]" ,
  "_2805XX"  , "_28[3-7]XXX" , "_331XXX"       ,
  "_848XXX"  , "_85XXXXX"    , "_879XXX"       ,
];

# Lets turn partterns into usable regex, based on the reference:
#   https://wiki.asterisk.org/wiki/display/AST/Pattern+Matching

foreach my $r (@$patterns)
{
  $r =~ s/_/^/;        # Proper regex starts with
  $r =~ s/X|x/\\d/g;     # Replace X with any digit
  $r =~ s/Z|z/[1-9]/g;  # Replace Z with 1-9 as per spec
  $r =~ s/N|m/[2-9]/g;  # Replace N with 2-9 as per spec

  my @matches = grep(/$r/i, @$numbers);

  print "Matching numbers for: ", $r, " are: ", join(', ', @matches), "\n";
}

谢谢大家。我找到了我要找的确切的程序

它被称为match_pattern.php,由Lorne Gaetz修改并发布在git上


描述:两个PHP函数,match_pattern和match_pattern,用于将数字字符串与星号拨号模式(或模式数组)进行比较,并返回修改后的数字字符串。

在PHP中:;或者。。。。也许其中一个可以用来匹配你需要的谢谢,马克。如果我必须自己编写函数,这将很有帮助,但问题的关键是找到一个现有的解决方案,这样我就不必这样做了。asterisk dialplan中的模式匹配可能会变得相当复杂。好吧,没有任何公开的asterisk函数可以满足您的需要,但是我加入asterisk服务器团队已经有几年了,所以我不能确定。您需要编写自己的解析器或查看源代码,看看是否可以调用在路由调用时进行匹配的后端函数。谢谢,Harvey。这接近我所需要的,但我在GitHub上找到了完美的PHP。见下文。