帮我确定TCL中的一个问题。
通过使用我的宏我想找到字符串,其中包含两个星号(**
)。
我尝试使用以下命令:
string match \*\* string_name
但它不起作用。你能解释一下我犯了什么错误以及如何正确地做到这一点吗?
提前致谢!
答案 0 :(得分:3)
您实际传递给翻译的是string match ** string_name
。你需要将实际的反斜杠传递给解释器,这样它才能理解两个转义的星号,为此你需要添加几个反斜杠:
string match \\*\\* $s
或使用大括号:
string match {\*\*} $s
请注意,如果$s
包含2个星号,则上述内容仅匹配 ,而不包含其他任何内容。要在星号之前和之后允许任何内容,您可以使用更多的星号......
string match {*\*\**} $s
还有一些其他方法可以检查一个字符串是否有双星号,你可以使用string first
(因为这个不支持表达式,你实际上可以逃脱而不必逃避任何东西):
string first ** $s
如果您获得的内容超过-1
,则**
中会出现$s
。
或者如果你碰巧知道一些正则表达式:
regexp -- {\*\*} $s
我认为这是最常见的。