Tcl_StringCaseMatch中的逃生方支架 我在C++模式中使用TCLS-STRICAN CASMACHAT/函数进行字符串模式匹配。在输入模式或字符串有括号之前,一切正常。例如: str1 = pq[0] pattern = pq[*] str1=pq[0] 模式=pq[*]

Tcl_StringCaseMatch中的逃生方支架 我在C++模式中使用TCLS-STRICAN CASMACHAT/函数进行字符串模式匹配。在输入模式或字符串有括号之前,一切正常。例如: str1 = pq[0] pattern = pq[*] str1=pq[0] 模式=pq[*],tcl,Tcl,Tcl\u StringCaseMatch不工作,即上述输入返回false。 如何避免模式匹配中的[]问题是[]是模式匹配中的特殊字符。您需要使用反斜杠对其进行转义,以便将其视为普通字符 pattern= "pq\\[*\\]" 我不认为这也会影响字符串。双斜杠的原因是希望将反斜杠本身传递给TCL引擎 对于普通读者: []在TCL中通常有一个特殊的含义,除了它们在这里扮演的模式匹配角色——“run command”(比如shell中的``或$()),但是[number]将没有效果,括号被正常处

Tcl\u StringCaseMatch
不工作,即上述输入返回false。
如何避免模式匹配中的
[]
问题是
[]
是模式匹配中的特殊字符。您需要使用反斜杠对其进行转义,以便将其视为普通字符

pattern= "pq\\[*\\]"
我不认为这也会影响字符串。双斜杠的原因是希望将反斜杠本身传递给TCL引擎

对于普通读者:

[]
在TCL中通常有一个特殊的含义,除了它们在这里扮演的模式匹配角色——“run command”(比如shell中的``或
$()
),但是
[number]
将没有效果,括号被正常处理-因此字符串
str1
不需要在这里转义

额外的困惑:


TCL将默认情况下不使用前面的
[
]
解释为正常字符。我觉得这太令人困惑了,宁愿TCL抱怨括号不平衡。不过,正如OP提到的,这允许您放弃最后两个反斜杠并使用
“pq\\\[*]”
。我不喜欢这一点,我要说的是,这两个都是正常的,不是通常的TCL方式,而是对每个人来说都是自己的。

需要避开两个括号还是只打开一个?@AvinashKumar如果TCL看到一个
]
而没有前缀
[
,它假设它是一个常规字符,这就是它工作的原因。我更希望抛出一个错误。我认为这很混乱,所以我没有将它添加到解决方案中,但正如您所说的那样-它工作。@AvinashKumar您更改了您的内联注释。您以前的注释更好-您只需跳过第一个,但请查看我的编辑。谢谢您的快速回复lp。