Переопределение подстановочных знаков tcl list lsearch

У меня есть список таких пар в tcl; один из которых имеет (*) звезду в качестве второго элемента.

{ff 122} {ff 1} {fg 1} {ff *} {fg *} --->var1

теперь я хочу найти пару {fg *}, используя

lsearch $var1 [list "fg" "*"]

но он ошибочно показывает 2 {fg 1} вместо 4 {fg *}, поскольку * действует как идентификатор подстановки. Я не могу переопределить это с помощью /* или {*} . Может ли кто-нибудь помочь мне с этой насущной проблемой.


person Codename_DJ    schedule 02.12.2013    source источник


Ответы (2)


lsearch позволяет выбрать алгоритм, используемый для сопоставления строк. Значение по умолчанию — -glob, которое расширяет подстановочные знаки *. Но вы также можете выбрать -exact для простого сопоставления строк или -regexp для регулярных выражений:

lsearch -exact $var1 "fg *"

or

lsearch -regexp $var1 {fg \*}

или даже

lsearch -regexp $var1 {fg\s*\*}

В зависимости от того, что вы на самом деле собираетесь делать.

См.: http://www.tcl.tk/man/tcl8.6/TclCmd/lsearch.htm

person slebetman    schedule 02.12.2013
comment
Тому, кто редактировал мой код: пока ваше редактирование было действительным, исходный код был в равной степени действительным. fg \* — идеальное регулярное выражение. - person slebetman; 04.12.2013

person    schedule
comment
но результатом этой строки является первый ошибочно сопоставленный список. я хочу знать, присутствует ли пара со звездой или нет. - person Codename_DJ; 02.12.2013
comment
о мой плохой .. я неправильно истолковал. исправил код. @Codename_DJ любезно проверь. - person Vishwadeep Singh; 02.12.2013
comment
Вы знаете, что можете избежать ада цитирования, используя {fg \*}, не так ли? - person slebetman; 04.12.2013
comment
да. я думаю, оба имели в виду одно и то же @slebetman. Это будет работать. Я просто дал отличный от вашего ответ. Все ваши ответы были идеальными. просто я добавил еще один .. :) - person Vishwadeep Singh; 04.12.2013