Если вы просто хотите увидеть, есть ли какая-то короткая простая строка в другом, regexp
- неправильный подход. Вместо этого используйте string first
:
if {[string first [lindex $mylist 2] $mystring] >= 0} {
puts "OK"
}
Если список действительно имеет регулярное выражение в его третий элемент, то этого достаточно, чтобы сделать это, потому что Tcl всегда обнаруживает, если RE соответствует в любом месте (это шаблоны unanchored по умолчанию):
if {[regexp -- [lindex $mylist 2] $mystring]} {
puts "OK"
}
--
только в том случае, RE начинается с -
характер, что может привести к путанице.Вы можете также использовать regexp
работать немного как то string first
рецепт:
if {[regexp ***=[lindex $mylist 2] $mystring]} {
Но код с string first
будет быстрее! Если вам нужно что-то гораздо более сложное, это, вероятно, хорошая идея: остановите и подумайте, правильно ли вы выполняете то, что вы делаете; когда вы делаете сложные замены в регулярных выражениях, вы обычно попадаете в беспорядок. (Или, по крайней мере, это то, что я знаю I нужно переосмыслить.) Задавая здесь - при предоставлении немного больше контекста - может помочь вам разобраться.
Я не думаю, что регулярное выражение может включать переменные - все внутри \\ является частью регулярного выражения. – dax
Возможно, если вы установите выражение с помощью '-all' и' -inline', а затем установите индекс списка из этого шаблона переменной. – hwnd