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