微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

匹配方括号中的字符串的语法如`[a string]`?

如何解决匹配方括号中的字符串的语法如`[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 举报,一经查实,本站将立刻删除。