in reply to Regex Help

More than looking inefficient, it looks unnecessarily cluttered, which can contribute to bugs:

Making those changes would yield:

9818\D?9[01]\D?\d{2}(?:\D?\d{4}){2}

Now with the /x modifier, you can further clarify things like this:

m/ 9818 # A literal. \D? # Optional non-digit. [01] # Require a zero or a one. \D? # Another optional non-digit. \d{2} # Require two digits. (?: # Group but don't capture. \D? # Another optional non-digit. \d{4} # Followed by four digits. ){2} # Repeated twice. /x

As for efficiency, what problems are you encountering? If you're dealing with huge input you're probably IO bound anyway.


Dave

Replies are listed 'Best First'.
Re^2: Regex Help
by gautamparimoo (Beadle) on Mar 25, 2013 at 08:48 UTC

    Thnks davido your regex just cleaned it up. But what modifiers or assertion should i use to limit matching such that it does not match it in different lines in a text file ie only match if this pattern is specified in one line not across different lines. Pl tell?

      Replace \D? with a more explicit character class. \D will match anything that is not a numeric digit. Newlines (\n) are included in "anything that is not a numeric digit".


      Dave

        Exactly what i was trying to say.. How to do tell it to \D except \n ?