我有以下模式
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
答案 0 :(得分:2)
原因是你的.*?
充当贪婪的子模式(= .*
匹配0+任何字符,包括换行符)因为模式中的第一个量词是贪婪的(见{{ 1}})。见this Tcl Regex reference:
分支与其中具有首选项的第一个量化原子具有相同的偏好。
您需要在第一个\d+
量化的子模式之后添加+
,将其变为惰性模式:
?
这会阻止Notif\[\d+?\].*?(?=Notif|Finish)
^
模式继承.*?
的贪婪。
请参阅IDEONE demo