On 12/18/06, Abigail <[email protected]> wrote:
On Sun, Dec 17, 2006 at 11:07:50PM -0800, Yoz Grahame wrote:
> On 12/17/06, Robert Rothenberg <[email protected]> wrote:
> >
> >Bad comparison: traditional regexps are much easier to read than the ones
> >used in contemporary programming languages.
>
> PCRE-style regexp in Javascript:
> regexp = /(\d{1,3}\.){3}\d{1,3}/;
>
> Traditional POSIX regexp in C:
> char regexp[] = "\\([:digit:]\{1,3\}\\.\\)\\{3\\}[:digit:]\\{1,3\\}";
>
> The second one is clearly the more horrific of the two hateful messes,
> but I'll give you that it's *way* more fun to type if you just can't
> get enough joyful bouncing on the backslash key.
> (And traditional POSIX holds an even deeper hate - backslashes EITHER
> switch a character from being a literal to a metacharacter, OR from a
> metacharacter to a literal, depending on the character in question.
> Consistency's for suckers, clearly.)
Well, so does Perl, and so your PCRE example. The latter backslashes
the d, turning the literal d into a metacharacter, and it backslashes
the ., turning the metacharacter . into the literal .
In Perl the rule is: If its an alpha-numeric char then escaping it
turns it into a meta pattern. If its non-alpha then escaping it turns
it into a literal. The latter rule is hard, and afaik applies to every
Perl. Hatefully tho perl will treat an unknown escape-alphanum
sequence as an unescaped char, not even warning.
--
perl -Mre=debug -e "/just|another|perl|hacker/"