反斜杠的模式匹配问题

时间:2018-08-08 19:24:27

标签: tcl

我在TCL教程页面上找到了以下说明:

  

\ X

     

反斜杠在Tlob替换中的转义中转义了一个特殊字符。使用反斜杠可让您使用glob来匹配*或?。

Simple pattern matching - "globbing"

然后我有以下代码用于测试:

set list1 "1 2 3 *"
puts [lsearch $list1 *]
puts [lsearch $list1 \*]

set list2 "a b ? c"
puts [lsearch $list2 ?]
puts [lsearch $list2 \?]

但是,结果与我预期的有些不同。 所有这4个puts命令都返回索引0,以列表中的第一个元素为参考。

为什么puts [lsearch $list1 \*]puts [lsearch $list2 \?]不返回32。我认为在*?前面加上反斜杠后,这些字符不再具有任何特殊含义。

1 个答案:

答案 0 :(得分:2)

反斜杠在标准Tcl语法中也用于转义各种字符。 您需要转义反斜杠,以便将其传递到lsearch命令。

所以您需要:

set list1 "1 2 3 *"
puts [lsearch $list1 *]
puts [lsearch $list1 \\*]
puts [lsearch $list1 {\*}] ; # or this

set list2 "a b ? c"
puts [lsearch $list2 ?]
puts [lsearch $list2 \\?]
puts [lsearch $list2 {\?}]