TCL中的两个星号字符串匹配

two asterisk sttring match in TCL

帮我解决一个TCL的问题。 通过使用我的宏,我想要找到包含两个星号 (**) 的字符串。 我尝试使用以下命令:

string match \*\* string_name

但是没用。你能解释一下我在哪里犯了错误以及如何正确地做吗?

提前致谢!

你实际上传递给解释器的是string match ** string_name。您需要将实际的反斜杠传递给解释器,以便它理解两个转义的星号,为此您需要添加更多的反斜杠:

string match \*\* $s

或使用大括号:

string match {\*\*} $s

请注意,如果 $s 包含 2 个星号,则以上内容将仅匹配 ,没有其他内容。要允许星号前后的任何内容,您可以使用更多星号...

string match {*\*\**} $s

还有一些其他方法可以检查字符串是否有双星号,例如您可以使用 string first(并且由于这个不支持表达式,您实际上可以不用转义任何东西就可以逃脱):

string first ** $s

如果您得到的值大于 -1,则 ** 出现在 $s

或者如果您碰巧知道一些正则表达式:

regexp -- {\*\*} $s

这些是我认为最常见的。