VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Вопрос по REGEX

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Вопрос по REGEX

Сообщение tol_iwan »

Некоторые настройки asterisk пользователи могут для себя менять через jabber отсылкой определенного сообщения. Как правило формат сообщения такой же как и при наборе с телефона.
Установка переадресации в системе стоит *10<номер>. Номер может быть только внутренний - [23]XXX
Соответственно в проверке присланной команды есть такая строка:
same => n,GotoIf($[${REGEX("^\*10[2-3][0-9][0-9][0-9]$" ${MsgBody})}]?redirect_add,1:)

при проверке в консоли:
WARNING[7673][C-00000096]: func_strings.c:977 regex: Malformed input REGEX(): Invalid preceding regular expression

Выражение правильное с точки зрения регулярных, проверил даже на online-сервисе.
если вместо * использовать #, то работает нормально, но мне нужна именно *.
В чем затык-то? REGEX не понимает значение \* что ли?
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: Вопрос по REGEX

Сообщение tol_iwan »

Собственно
CLI> core show version
Asterisk 11.9.0
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: Вопрос по REGEX

Сообщение tol_iwan »

ddkprog писал(а):и что такое \* ? может два слеша \\* ?
специальные символы могут быть экранированы символом \ (обратная косая черта) для представления самих себя в качестве символов текста. Причем тут \\?
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: Вопрос по REGEX

Сообщение tol_iwan »

А таки заработала зараза с \\. В чем суть-то?
Спасибо, кстати :-)
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: Вопрос по REGEX

Сообщение tol_iwan »

так * и есть спецсимвол-то.
Сейчас дебаг посмотрю.
ddkprog писал(а): текст проходит всякие преобразования с конфига в модуль regcomp
Вот это в принципе может объяснить как-то \\
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: Вопрос по REGEX

Сообщение tol_iwan »

Мне нужна просто *. Хотелось бы понять почему работает с \\, вместо \
ddkprog писал(а):звездочка без слешей - это один или много раз повторений для регекспа
ноль и более, путаете с +

Не поленился, поискал в Дж.Фридл 3-е издание:
"Например, звездочка интерпретируется как литерал в выражении \* но не в \\* (когда первый символ \ обеспечивает особую интерпретацию второго символа), хотя в обоих случаях «перед звездочкой стоит символ обратного слэша»."
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

Re: Вопрос по REGEX

Сообщение tol_iwan »

Код: Выделить всё

[Sep  3 13:07:34] DEBUG[7673][C-00000096]: pbx.c:4883 pbx_extension_helper: Launching 'GotoIf'
[Sep  3 13:07:34] DEBUG[7673][C-00000096]: pbx.c:11810 pbx_builtin_gotoif: Not taking any branch
[Sep  3 13:07:34] DEBUG[7673][C-00000096]: pbx.c:3671 ast_str_retrieve_variable: Result of 'MsgBody' is '*102504'
[Sep  3 13:07:34] DEBUG[7673][C-00000096]: func_strings.c:973 regex: [b]FUNCTION REGEX (^*10[2-3][0-9][0-9][0-9]$)(*102504)[/b]
[Sep  3 13:07:34] WARNING[7673][C-00000096]: func_strings.c:977 regex: Malformed input REGEX(): Invalid preceding regular expression
[Sep  3 13:07:34] DEBUG[7673][C-00000096]: pbx.c:4715 pbx_substitute_variables_helper_full: Function REGEX("^\*10[2-3][0-9][0-9][0-9]$" *102504) result is '(null)'
что собственно понятно, зная что \\* нужно использовать. Т.е. при посылке в обработчик один \ пропадает.
Спасибо вообщем за помощь. :-)
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH