Tcl_StringCaseMatch中的转义方括号



我在C++代码中使用Tcl_StringCaseMatch函数进行字符串模式匹配。一切正常,直到输入模式或字符串有括号[]。例如,例如:

str1 = pq[0]    模式 = pq[*]

Tcl_StringCaseMatch不起作用,即为上述输入返回 false。 如何避免模式匹配[]

问题是模式匹配中[]特殊字符。您需要使用反斜杠对它们进行转义,以将它们视为普通字符

pattern= "pq\[*\]"

我认为这也不会影响字符串。双斜杠的原因是您希望将反斜杠本身传递给 TCL 引擎。

对于普通读者:

一般来说,[]在 TCL 中具有特殊的含义,超出了它们在这里所扮演的模式匹配角色——"run command"(如 shell 中的 '' 或$()(,但[number]不会有任何影响,括号被正常处理——因此字符串str1在这里不需要转义。

对于额外的困惑:

默认情况下,TCL 会将没有前[]解释为普通字符。我觉得这太混乱了,宁愿TCL抱怨不平衡的括号。正如 OP 所提到的,这允许您放弃最后两个反斜杠并使用"pq\[*]".我不喜欢这样,而是很明显两者都是正常对待的,而不是通常的 TCL 方式,而是每个人她/是自己的。

最新更新