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

Posted

技术标签:

【中文标题】TCL中的两个星号字符串匹配【英文标题】:two asterisk sttring match in TCL 【发布时间】:2015-07-20 18:49:04 【问题描述】:

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

string match \*\* string_name

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

提前致谢!

【问题讨论】:

【参考方案1】:

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

string match \\*\\* $s

或者使用大括号:

string match \*\* $s

请注意,如果$s 包含 2 个星号,则上述内容将匹配 ,仅此而已。要允许星号之前和之后的任何内容,您可以使用更多星号...

string match *\*\** $s

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

string first ** $s

如果你得到的东西大于-1,那么** 会出现在$s 中。

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

regexp -- \*\* $s

这些是我认为最常见的。

【讨论】:

这个正则表达式少了反斜杠:[*][*] @glennjackman 同意,虽然时间更长。与[*]2类似的一个 杰瑞,非常感谢您的帮助!你帮了我很多!

以上是关于TCL中的两个星号字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

匹配两个字符串之外的所有内容

正则表达式

使用匹配替换随机字符串/字符数组字符

bzoj 3507: [Cqoi2014]通配符匹配

[BZOJ3507]通配符匹配

Leetcode44. 通配符匹配(动态规划)