in reply to Re: AND and OR on Regular Expressions
in thread AND and OR on Regular Expressions

There's no reason to use '.*?' instead of '.*' in your examples - a pattern that will match with '.*?' will match with '.*' as well. But '.*?' can be significantly slower than '.*'. I prefer to avoid '.*?' if '.*' will do.

Note that the "one regexp" is still useful - you can pass in a single regexp to a function, 'qr' it, pass it in a webform, or store it in a configuration file which you usually cannot do with the && chained ones.

  • Comment on Re^2: AND and OR on Regular Expressions

Replies are listed 'Best First'.
Re^3: AND and OR on Regular Expressions
by ikegami (Patriarch) on Aug 25, 2009 at 16:36 UTC

    There's no reason to use '.*?' instead of '.*' in your examplesl.

    It matters if the pattern contain captures.

    I must admit I approached my post backwards. I started with /pat1/ && /pat2/ and gave the functionally equivalent pattern. (Well, /.*?/ should actually be /(?s:.)*?/)

      If the patterns contain captures, then
      /pat1/ && /pat2/
      and
      /(?=.*?pat1)(?=.*?pat2)/s
      aren't equivalent in the first place.

      Note also that the OP didn't specify whether pat1 and pat2 may overlap. /pat1/ && /pat2/ has the potential to match more than /pat1.*pat2|pat2.*pat1/s. All of the presented solutions so far assume it's ok the patterns may overlap.

        aren't equivalent in the first place.

        Aside from the missing leading ^, what do you mean?

        Granted, you need some extra code if you want to know what those captures are, but I don't see how they'll capture something different.

        Or are you simply referring to the renumbering of the variables in backrefs?