2013-06-10 2 views
2

я увидел ре так:Какое следующее регулярное выражение пытается совместить?

regexp "hello\[^\\n]*06" $str 

, что это \[^\\n]* пытается соответствовать?

+2

Вы уверены, что «\» перед «[»? Странно. Это похоже на ошибку. –

+0

Это должна быть опечатка или попытка тролля, она должна быть '[^ \\ n] *', что означает совпадение с чем-либо, кроме '\ n' (line feed), ноль или более раз. – HamZa

+0

Уверен, что есть «\» перед «[» – user2131316

ответ

5

В tcl строки, сгруппированные по двойным кавычкам (""), подвергаются замене при оценке. Как вы знаете, TCL понимает следующие замены:

  • переменной substututions: Любое слово, которое начинается с $ знака заменяется на ее значение.
  • команда substutution: любая группа слов между [ и ] рассматривается как инструкция, а первое слово вызывается как команда (функция).
  • escape-подстановка: любая обратная косая черта (\) обрабатывается как escape-последовательность и соответственно заменяется.

Таким образом, следующий код:

regexp "hello\[^\\n]*06" $str 

эквивалентно:

regexp {hello[^\n]*06} $str 

Так он пытается соответствовать строку, которая содержит слово "привет" и "06" без каких-либо между ними.

Смежные вопросы