只能在tcl regexp中匹配子表达式吗?

时间:2015-09-02 15:54:01

标签: regex tcl

$ report包含以下文字:

// Command : generate report
Report 123
------------------------------
status        Names
------------------------------
Flat     :    Module1
Flat     :    Module2 
------------------------------
Total Flattened = 2

我只想提取模块名称。模块数量不详。如果我可以做这样的事情,那将是非常好的:

set modules [regexp -all -inline {Flat\s+:\s+(\S+)} $report]

但这会给我不关心的$模块带来额外的垃圾。我错过了什么吗?我知道有办法解决这个问题。似乎很奇怪,似乎没有办法关闭匹配完整的表达式。特别是因为有关闭子表达式匹配的语法(?:)。

1 个答案:

答案 0 :(得分:1)

不,没有办法得不到完整的匹配字符串。

lmap {full capture} $modules {set capture}

为您挑选捕获的字符串。

# for Tcl 8.5 and earlier
set res [list]
foreach {full capture} $modules {lappend res $capture}

你得到了所有这些东西,因为它可能是相关的,如果不是,那么很容易找出你想要的东西。

文档:foreachlmapset

Getting lmap for Tcl 8.5 and earlier