Страница 1 из 1

Вопрос по REGEX

Добавлено: 03 сен 2014, 11:15
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 не понимает значение \* что ли?

Re: Вопрос по REGEX

Добавлено: 03 сен 2014, 11:28
tol_iwan
Собственно
CLI> core show version
Asterisk 11.9.0

Re: Вопрос по REGEX

Добавлено: 03 сен 2014, 11:37
tol_iwan
ddkprog писал(а):и что такое \* ? может два слеша \\* ?
специальные символы могут быть экранированы символом \ (обратная косая черта) для представления самих себя в качестве символов текста. Причем тут \\?

Re: Вопрос по REGEX

Добавлено: 03 сен 2014, 11:38
tol_iwan
А таки заработала зараза с \\. В чем суть-то?
Спасибо, кстати :-)

Re: Вопрос по REGEX

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

Re: Вопрос по REGEX

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

Не поленился, поискал в Дж.Фридл 3-е издание:
"Например, звездочка интерпретируется как литерал в выражении \* но не в \\* (когда первый символ \ обеспечивает особую интерпретацию второго символа), хотя в обоих случаях «перед звездочкой стоит символ обратного слэша»."

Re: Вопрос по REGEX

Добавлено: 03 сен 2014, 13:13
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)'
что собственно понятно, зная что \\* нужно использовать. Т.е. при посылке в обработчик один \ пропадает.
Спасибо вообщем за помощь. :-)