在TCL中匹配regexp的问题

时间:2016-03-21 08:43:42

标签: regex tcl

我有以下模式

Notif[0]:
some text multiple line
Notif[1]:
multiple line text
Notif[2]:
text again
Notif[3]:
text again
Finish

我正在写reregxp

set notifList [regexp -inline -all -nocase {Notif\[\d+\].*?(?=Notif|Finish)} $var]

没有提供所需的输出

需要输出

I need a list with each `Notif`block

1 个答案:

答案 0 :(得分:2)

原因是你的.*?充当贪婪的子模式(= .*匹配0+任何字符,包括换行符)因为模式中的第一个量词是贪婪的(见{{ 1}})。见this Tcl Regex reference

  

分支与其中具有首选项的第一个量化原子具有相同的偏好。

您需要在第一个\d+量化的子模式之后添加+,将其变为惰性模式:

?

这会阻止Notif\[\d+?\].*?(?=Notif|Finish) ^ 模式继承.*?的贪婪。

请参阅IDEONE demo