如何解决检测带有开大括号的线
我正在逐行解析 tcl 文件并搜索带有大括号的行,以便我可以将它们与下一行合并并读取它们。 我正在努力获得一个正则表达式来做到这一点。我担心的是带有结束 } 的行,可以跳过。
示例: 匹配: test_command -switch1 {
没有匹配项:single_command
没有匹配项:test_tcl -switch2 {arg1 }
请帮助使用正则表达式以获得结果。我试过这个:
% set a "test_command -swithc1 {bye }"
test_command -swithc1 {bye }
% regexp "{" $a match
1
#0 is expected
这不是我的本意。我只想匹配带有大括号的行
% set b "test_command -swithc1 {hi"
test_command -swithc1 {hi
% regexp "{" $a match
1
#1 was expected
我正在寻找一个正则表达式,它会为 $a 提供 0,为 $b 提供 1
解决方法
您真的不应该为此使用正则表达式;有一个 Tcl 命令专门用于这种事情:info complete
。使用方法如下:
set accumulator ""
while {![eof $inputChannel]} {
# Note well: you *must* add the newline
append accumulator [gets $inputChannel] "\n"
if {[info complete $accumulator]} {
handleCompleteChunk $accumulator
set accumulator ""
}
}
这处理各种类型的括号匹配和反斜杠序列的复杂性,但只是检查“行”是否完整。 (这也是 Tcl 的 REPL 工作原理的核心,除了使用 Tcl C API 等效项。)
,您可以尝试几个“环视”,一个说“我看到左括号”,另一个说“我没有看到右括号”:
(?!.*\})(?=.*\{)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。