搜索不在//之后的“/ *”字符串

时间:2014-07-09 20:39:13

标签: tcl

我想在文件中找到使用tcl regexp的字符串/*后面没有//的字符串。
例如:

/* some note
...
...
//
.
.
///*
/*

结果应该是第一行和最后一行。忽略///*

2 个答案:

答案 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,但通常只是非常简单的......)