У меня есть старая версия freePBX (более 5000 расширений, сотни IVR), которую я должен документировать для перехода на более новую версию. Я должен отобразить, какие IVR используют какие транки. Для этого я должен сопоставить набираемый номер с шаблоном набора исходящего маршрута.
Столбец «расширений» таблицы с шаблонами, которые я должен сопоставить, выглядит следующим образом
19328555
_13XXXX
_1933370[0-2]
_2805XX
_28[3-7]XXX
_331XXX
_848XXX
_85XXXXX
_879XXX
Например, я должен найти, какой шаблон ‘extensions’ соответствует номеру 8481234, тогда я могу получить транк из другого столбца.
Я знаю, что должна быть функция, встроенная в Asterisk, которая работает как
$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";
}
Спасибо всем. Я нашел точную программу, которую искал на
https://gist.github.com/lgaetz/8695182
Она называется match_pattern.php, изменена и размещена на git Лорном Гетцем.
Описание: две функции PHP, match_pattern и match_pattern_all, которые сравнивают числовую строку с шаблоном набора звездочек (или массивом шаблонов) и возвращают измененную числовую строку.