dram.me

正则引擎的greedy模式

在Tcl中遇到正则的一个问题:

% regexp -inline {(.+?), (.+)} "foo, bar"
{foo, b} foo b

一开始以为是bug,之后发现这个问题早已被多次提出,例如这里这里,还有这里

而实际上,Tcl的文档中也greedy和non-greedy有说明。另外,PostgreSQL和Tcl基于同一个正则引擎,所以在greedy模式上的处理上是相同的,文档中对此有详细的介绍(9.7.3.5. Regular Expression Matching Rules)。