【问题标题】:Pattern matching issue with backslash反斜杠的模式匹配问题
【发布时间】:2018-08-08 19:24:27
【问题描述】:

我在 TCL 教程页面找到以下描述:

\X

反斜杠转义一个特殊字符,就像它在 Tcl 替换中所做的那样。使用反斜杠可以让您使用 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。我想在*?前面加上反斜杠,这些字符就没有任何特殊含义了。

【问题讨论】:

    标签: tcl


    【解决方案1】:

    反斜杠也用于标准 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 {\?}]
    

    【讨论】:

    • 知道了。谢谢您的帮助!我之前只尝试过双引号。
    • 我更喜欢-exact 标志而不是[lsearch]lsearch -exact $list1 *lsearch -exact $list2 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多