есть такая чудная либа для регэкспов: . тормоз, не понимает нежадности, но зато очень мелкая. и вот в версии 1.2 внесли досадный баг. демо:
regexp: 'abc([0-9]{2})(a)(b)'
string: 'abc12ab'
без бага:
[0]abc12ab
[1]12
[2]a
[3]b
match! 4 sub matches
с багом:
[0]abc12ab
[1]12
[2]
[3]b
в общем — автор ошибся. и вдобавок сильно поломал жадность, кстати, а нежадность не появилась. ниже — патч, который всё возвертает взад. я бы отослал на souceforge, но лень логин вспоминать.