如何在TCL中使用正则表达式匹配括号

3
我有一个问题,关于在TCL中使用正则表达式匹配括号。
例如我有一个这样的字符串:
yes, it is (true, and it is fine).

我只想匹配这一部分 yes, it is (true,如何匹配它?


通常在方括号中使用圆括号可以起到作用 - "[(]" - bobah
1
在正则表达式中,将字符 ()[]^$?.*+\ 前缀加上 \\ 是标准的正则表达式转义字符;这不是一个答案,因为我实际上不使用 TCL,所以它可能是正则表达式规则的一个例外。(编辑:忽略代码块中的尾随空格,否则文本会被 SO 解析错误) - Matt
1个回答

6

正如@bobah所建议的那样,您可以将括号放在字符类中。

yes, it is [(]true

但更常见的是对其进行转义:

yes, it is \(true

但是如果你正在转义它,请确保你了解必须执行以下操作之一:

regexp -- "yes, it is \\(true" $subject

或者是这样的:
regexp -- {yes, it is \(true} $subject

1
那是因为在Tcl中,双引号内的[]会被解释为命令。你必须使用regexp -- {yes, it is [(]true}或者regexp -- "yes, it is \[(\]true" - Andrew Cheong
并且正则表达式 -- "是的,它是 \(真实的" $主题不起作用。 - user707549
@ratzip - 正如我之前解释的那样,如果你要使用双引号,就必须转义反斜杠。 - Andrew Cheong
以下命令在我的tclsh中返回1: % regexp -- "yes, it is \\(true" "yes, it is (true, and it is fine).". - Andrew Cheong
与其说“它不起作用”,如果您告诉我们您看到的错误会更有帮助。 - Andrew Cheong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接