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

检测带有开大括号的线

如何解决检测带有开大括号的线

我正在逐行解析 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 等效项。)

,

您可以尝试几个“环视”,一个说“我看到左括号”,另一个说“我没有看到右括号”:

(?!.*\})(?=.*\{)

https://regex101.com/r/p8bbsF/1/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。