Регулярные выражения позволяют задавать шаблоны, с помощью которых телефонные номера А и Б проверяются на соответствие определенным условиям, и в зависимости от этого происходит преобразование номеров или срабатывание маршрута. Кроме того, с помощью регулярных выражений часть входящих вызовов может быть направлена на определенный IVR-сценарий.
Регулярные выражения используют при создании маршрутов входящей и исходящей связи и для преобразования номеров. Например, с помощью регулярных выражений можно отследить вызовы, совершаемые в Петербург, и направить их адресату через определенного оператора связи, предварительно откорректировав номера в соответствии с требованиями оператора (изменив префикс и убрав лишние символы).
Администратор через web-интерфейс может задавать регулярные выражения для маршрутов обработки вызовов и преобразований номеров.
Получая сигнал на исходящий вызов, система проводит проверку номеров на соответствие заданным шаблонам, корректирует их и выбирает подходящую исходящую линию. При этом сначала срабатывают преобразования номеров, а потом производится поиск маршрута.
При входящем вызове система пытается найти подходящий фильтр, анализируя соответствие номеров выражениям фильтра с учетом их приоритета. Если фильтр срабатывает, то вызов направляется на указанный IVR-сценарий.
При создании маршрутов и преобразований номеров администратор с помощью регулярных выражений может настроить шаблоны номеров для вызывающего и вызываемого абонентов.
Например, нужно создать исходящую SIP линию связи, используемую для вызовов в Петербург. Для того чтобы узнать, что вызовы на питерские номера будут идти именно через этот маршрут, нужно проверять с помощью шаблона регулярных выражений, есть в исходящих номерах код Питера «812» или нет. Для этого в строке «Поле To» нужно написать регулярное выражение «.*812.*», означающее, что любой номер, содержащий в себе цифры «812», будет соответствовать этому шаблону («.*» перед «812» означает любое количество любых символов). Но такой шаблон пропустит на питерский маршрут и московский номер с цифрами «812» не в коде, а в номере телефона. Поэтому нужно усложнить шаблон до вида «.*812[0-9]{7}.*», где выражение «[0-9]{7}» означает семь подряд идущих цифр, а все выражение «.*812[0-9]{7}.*» в целом – любые номера, содержащие в себе «812» и семь цифр после (номер абонента). Можно было в строке «Предустановленная маска (To)» из выпадающего списка выбрать вариант «Питер», тогда бы в строке «Поле To» нужное регулярное выражение появилось автоматически.
Регулярные выражения должны быть записаны в соответствии с общепринятым стандартом PCRE.
Якоря:
^ – начало строки;
\А – начало строки;
$ – конец строки;
\Z – конец строки;
\b – граница слова;
\B – не граница слова;
\< – начало слова;
\> – конец слова.
Классы символов:
\c – control символ;
\s – пробел;
\S – не пробел;
\d – цифра;
\D – не цифра;
\w – слово;
\W – не слово;
\x – шестнадцатеричная цифра;
\O – восьмеричная цифра.
POSIX:
[:upper:] – заглавные буквы;
[:lower:] – строчные буквы;
[:alpha:] – все буквы;
[:alnum:] – цифры и буквы;
[:digit:] – цифры;
[:xdigit:] – шестнадцатеричные цифры;
[:punct:] – пунктуация;
[:space:] – пробел и отступ;
[:cntrl:] – контрольные символы;
[:graph:] – напечатанные символы;
[:print:] – напечатанные символы и пробелы;
[:word:] – цифры, буквы и индексы.
Умножители:
* – 0 или более вхождений предшествующего выражения. Например, «zo*» соответствует «z» и «zoo»;
+ – 1 или более предшествующих выражений. Например, «zo+» соответствует «zo» и «zoo», но не «z»;
? – 0 или 1 предшествующих выражений. Например, «do(es)?» соответствует «do» в «do» или «does»;
{n} – точное количество вхождений, где n – целое неотрицательное число. Например, «o{2}» не найдет «o» в «Bob»,но найдет два «o»' в «food»;
{n,}– вхождение, повторенное не менее n раз, где n – целое неотрицательное число. Например, «o{2,}» не находит «o» в «Bob», зато находит все «o» в «foooood»;
{n,m} – минимум n и максимум m вхождений, где n и m – целые неотрицательные числа, при этом n не больше m. Например, «o{1,3}» находит три первые «o» в «fooooood». Пробел между запятой и цифрами недопустим.
Символ «\»:
\ – считать следующий метасимвол как обычный символ. Например, выражение «/s/» ищет просто символ «s». А если поставить «\» перед «s», то «/\s/» уже обозначает пробельный символ. И наоборот, если символ специальный, например «*», то «\» сделает его просто обычным символом «звездочка». Например, «/a*/» ищет 0 или больше подряд идущих символов «a». Чтобы найти «а» со звездочкой «a*» – поставим «\» перед специальным символом: «/a\*/».
Метасимволы: «^», «$», «(», «)», «<», «>», «{», «\», «|», «[», «.», «*», «+», «?».
Специальные символы:
\n – новая строка;
\r – перевод каретки;
\t – символ табуляции;
\v – вертикальная табуляция;
\f – символ перевода формата (FF);
\xxx – символ с кодом xx (две восьмеричные цифры);
\xhh – символ с кодом hh (две шестнадцатеричные цифры).
Группировки и границы:
. – один произвольный символ за исключением «\n» (конец строки);
(a|b) – соответствие a или b;
(…) – группировка;
[abc] – любой символ из заключенных в квадратные скобки;
[^abc] – любой символ кроме тех, которые заключены в квадратные скобки;
[a-q] – любой символ в указанном диапазоне строчных букв;
[A-Q] – любой символ в указанном диапазоне заглавных букв;
[0-7] – любой символ в указанном диапазоне цифр.
Примечание – границы включаются в диапазон.
Модификаторы:
g – находит все найденные подстроки;
i – игнорирует регистр символов в строке;
m – рассматривает строку как многострочное значение;
s – рассматривает строку как однострочное значение;
x – позволяет использовать расширенные регулярные выражения;
e – вычисляет подстановочное выражение перед подстановкой.
Подстановка строк:
$2 – «xyz» в «/^(abc(xyz))$/»;
$1 – «xyz» в «/^(?:abc)(xyz)$/»;
$` – все до совпадения;
$' – все после совпадения;
$+ – последнее совпадение;
$& – все совпадение.
Octopus - это многоканальный телефонный номер, чтобы вам дозвонились