如何解决匹配方括号中的字符串的语法如`[a string]`?
我对期望(和 TCL)还很陌生,但对编程并不陌生。 但是我正在解决一个我无法解决的问题(使用 expect 5.45):
我想匹配 (expect
) 像 [detached from ...]
这样的字符串,但我没有成功:
-
-gl "\[detached from *\]"
被视为一个字符类,重复匹配单个字符。 -
-gl "\\[detached from *\\]"
似乎与-gl "[detached from *]"
相同,导致类似“无效命令名称“分离””之类的错误。
显然我不能使用 -ex(act)
,因为 ...
部分是可变的。
解决方法
由于双引号,您需要:
expect -gl "\\\[detached from *\\\]"
前两个斜杠是在模式中放置一个斜杠。
第三个斜杠是为了避免将括号解释为命令替换。
虽然使用大括号更简单(Tcl 相当于 shell 单引号
expect -gl {\[detached from *\]}
,
给出我自己的替代答案(按反斜杠的数量排序):
-
-gl "[detached from *]"
执行命令替换(调用名为detached
的函数,其中from
和*
被视为函数的参数。立> -
-gl "\[detached from *\]"
确实阻止了命令替换,但是[
为匹配引擎引入了一个字符类,因此字符串不会按字面匹配。 -
-gl "\\[detached from *\\]"
在\
前添加文字[detached from *]
(仍被解释为命令替换。 -
-gl "\\\[detached from *\\\]"
添加文字\
(留下\[...
),因此也转义命令替换,因此匹配引擎将看到\[...\]
,按字面意思处理[
(而不是作为字符类的开始)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。