我想在文件中找到使用tcl regexp的字符串/*
后面没有//
的字符串。
例如:
/* some note
...
...
//
.
.
///*
/*
结果应该是第一行和最后一行。忽略///*
。
答案 0 :(得分:0)
这适用于您的示例,但如果/*
不在行的开头,则不会:
set a "/* some note
...
...
//
.
.
///*
/*"
set re {^/\*.*$}
puts [regexp -all -inline -line $re $a]
事实上,听起来你也希望跳过'// /*'
- 就像在嵌套注释中一样?
编辑:我将.*$
添加到正则表达式中,因此将包含其余的注释行。上面的示例现在返回此列表:
{/* some note} /*
答案 1 :(得分:0)
Tcl的RE引擎并没有外观(如果你想提交补丁来添加它,请随意)。这意味着找到符合您想要的线条的最简单方法可能是预过滤。
foreach line [split $data "\n"] {
if {[regexp {/\*} [regsub {//.*} $line ""]]} {
puts "Found match in $line"
}
}
如果您正在解析包含这两种注释语法的某种语言,请使用真正的解析器。比试图将所有东西都楔入正则表达式要容易得多。 (解析器倾向于使用RE,但通常只是非常简单的......)