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
这些是我认为最常见的。
帮我解决一个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
这些是我认为最常见的。