------- You are receiving this mail because: ------- You are on the CC list for the bug.
http://bugs.exim.org/show_bug.cgi?id=1303 Summary: Recursion and greedy matching Product: PCRE Version: 8.12 Platform: All OS/Version: All Status: NEW Severity: bug Priority: medium Component: Code AssignedTo: [email protected] ReportedBy: [email protected] CC: [email protected] When I make the recursive-backreference (?R) optional (with ?) it doesn't match the data to its full extent. I've tested this with pcretest 7.7 and PHP 5.4.7 (uses pcre 8.12). When I match this regex, I would expect the second } to be included in 0. re> /{[A-Z]+(\|param:[^|}]*(?R)?[^|}]*)*}/ data> A{X|param:{Y}}B 0: {X|param:{Y} 1: |param:{Y If I make de (?R) mandatory, it does work as expected: re> /{[A-Z]+(\|param:[^|}]*(?R)[^|}]*)*}/ data> A{X|param:{Y}}B 0: {X|param:{Y}} 1: |param:{Y} And I've found the following workaround to do what I want: re> /{[A-Z]+(\|param:([^|}]*(?R)[^|}]*|[^|}]*))*}/ data> A{X|param:{Y}}B 0: {X|param:{Y}} 1: |param:{Y} 2: {Y} -- Configure bugmail: http://bugs.exim.org/userprefs.cgi?tab=email -- ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev
