attached are some ast testregex tests that examine the pattern in your example
in the tests ~(A) is equivalent to ~(X)

testregex is in the ast-open package in src/cmd/re
the man page is online at www.research.att.com/sw/download/

testregex input data documents patterns, subject strings, and the expected 
outcome,
including sub-group matches

the tests exposed a bug in ast:regsubcomp() that will be fixed in the next alpha

On Tue, 20 Aug 2013 22:31:38 +0200 Dan Shelton wrote:
> I may have found a bug in ~(X). AFAIK the first index (.sh.match[0])
> in .sh.match always lists all patterns for which matches have been
> found, and all following indexes (.sh.match[0..inf]) store the
> captured matches for a specific bracket pair, right?

> If that's correct, why does '15' appear in .sh.match[0][0] but no
> other match has '15' later?

> ksh -c 'x="a15 b2 c3" ; d="${x//~(X)(([[:alnum:]])&([[:digit:]]))+/}"
> ; print -v .sh.match'
> (
>         (
>                 15
>                 2
>                 3
>         )
>         (
>                 5
>                 2
>                 3
>         )
>         (
>                 5
>                 2
>                 3
>         )
>         (
>                 5
>                 2
>                 3
>         )
> )

> Dan
> _______________________________________________
> ast-developers mailing list
> [email protected]
> http://lists.research.att.com/mailman/listinfo/ast-developers

# regex conjunction tests

A       [[:alnum:]]+                            a15 b2 c3       (0,3)
A       ([[:alnum:]])+                          a15 b2 c3       (0,3)(2,3)
A       (([[:alnum:]]))+                        a15 b2 c3       (0,3)(2,3)(2,3)

A       [[:digit:]]+                            a15 b2 c3       (1,3)
A       ([[:digit:]])+                          a15 b2 c3       (1,3)(2,3)
A       (([[:digit:]]))+                        a15 b2 c3       (1,3)(2,3)(2,3)

K       +([[:alnum:]])                          a15 b2 c3       (0,3)(0,3)
K       +(([[:alnum:]]))                        a15 b2 c3       (0,3)(0,3)(2,3)

K       +([[:digit:]])                          a15 b2 c3       (1,3)(1,3)
K       +(([[:digit:]]))                        a15 b2 c3       (1,3)(1,3)(2,3)

# the following group shows the difference between +(...) and (...)+ subgroup 
reporting

A       (([[:alnum:]])&([[:digit:]]))+          a15 b2 c3       
(1,3)(2,3)(2,3)(2,3)
K       ~(A)(([[:alnum:]])&([[:digit:]]))+      a15 b2 c3       
(1,3)(2,3)(2,3)(2,3)

A       (?K-a)+(([[:alnum:]])&([[:digit:]]))    a15 b2 c3       
(1,3)(1,3)(2,3)(2,3)
K       +(([[:alnum:]])&([[:digit:]]))          a15 b2 c3       
(1,3)(1,3)(2,3)(2,3)

# the following group should be the equivalent

A/      /(([[:alnum:]])&([[:digit:]]))+/X/g             a15 b2 c3       aX bX cX
K/      /~(A)(([[:alnum:]])&([[:digit:]]))+/X/g         a15 b2 c3       aX bX 
cX        # regsubexec() BUG fixed #
A/      /(?K-a)+(([[:alnum:]])&([[:digit:]]))/X/g       a15 b2 c3       aX bX 
cX        # regsubexec() BUG fixed #
K/      /+(([[:alnum:]])&([[:digit:]]))/X/g             a15 b2 c3       aX bX cX
_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to