------- 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 

Reply via email to