in reply to Re: Integrating match counts into regex matching
in thread Integrating match counts into regex matching

Nice two-liner, BrowserUk!

I like the coding-elegance.

Just two (small?) bits I don't understand, the rest is crystal-clear:

1) What does (?<!a) do?

2) What does (?!b) do?

Thanks! - Pat

Replies are listed 'Best First'.
Re^3: Integrating match counts into regex matching
by BrowserUk (Patriarch) on Dec 19, 2008 at 00:10 UTC
    1. What does (?<!a) do?

      Zero-length negative lookbehind. Ensures that the string of a's is not preceded by another a.

    2. What does (?!b) do?

      Zero-length negative lookahead. Ensures the matched string of b's is not followed by another b.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Why? I can't think of a situation where omitting the lookahead and the lookbehind will change the answer.

      Nevermind, I didn't realize this was a new thread with a different question.

        I'm not sure that it is a different question? Anyhow, my limited testing threw up one case where the negative lookbehind was necessary:

        With and without negative lookbehind:

        Perl> 'aaabb' =~ m[ (?{ local( $a, $b ) }) ( (?<!a) ( a (?{++$a}) )+ ( b (?{++$b}) )+ ) (?(?{ $a+1 == $b }) (?=) | (?!) ) ]x and print "'$1'";; Perl> 'aaabb' =~ m[ (?{ local( $a, $b ) }) ( ( a (?{++$a}) )+ ( b (?{++$b}) )+ ) (?(?{ $a+1 == $b }) (?=) | (?!) ) ]x and print "'$1'";; 'abb'

        A breif further test suggests that the negative lookahead may be unnecessary, but I threw it in on the basis that it would do no harm, and may catch a case I haven't thought to test. With a regex using closures, it's doubtful if it will slow things down noticably?


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.