Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Re^3: Why this Regex code is not working??

by AnomalousMonk (Canon)
on Sep 23, 2012 at 08:47 UTC ( #995188=note: print w/replies, xml ) Need Help??

in reply to Re^2: Why this Regex code is not working??
in thread Why this Regex code is not working??

The  use re 'debug'; statement/pragma (see re) is useful to gain insight into what the Perl regex compiler thinks you wrote.

The debug output is just a teensy bit opaque, but some insight can be had just by noting that in both cases below, the  'a' literal substring part of the regex is denoted as
     6:   EXACT <a> (8)
whereas in the case that doesn't work, what you think is a counted quantifier is denoted
    14:   EXACT <{0, 5}> (17)
(i.e., the regex compiler thinks it's a  '{0, 5}' literal substring), versus
    13:   CURLY {0,5} (16)
    15:     REG_ANY (0)
in the case of the correctly written counted quantifier (the one that works as expected).

>perl -wMstrict -le "use re 'debug'; ;; my $rx = qr/(?<WORD>\b\w*a\b)(?<EXTRA>.{0, 5})/; " Compiling REx "(?<WORD>\b\w*a\b)(?<EXTRA>.{0, 5})" Final program: 1: OPEN1 'WORD' (3) 3: BOUND (4) 4: STAR (6) 5: ALNUM (0) 6: EXACT <a> (8) 8: BOUND (9) 9: CLOSE1 'WORD' (11) 11: OPEN2 'EXTRA' (13) 13: REG_ANY (14) 14: EXACT <{0, 5}> (17) 17: CLOSE2 'EXTRA' (19) 19: END (0) floating "{0, 5}" at 2..2147483647 (checking floating) stclass BOUND m +inlen 8 Freeing REx: "(?<WORD>\b\w*a\b)(?<EXTRA>.{0, 5})" >perl -wMstrict -le "use re 'debug'; ;; my $rx = qr/(?<WORD>\b\w*a\b)(?<EXTRA>.{0,5})/; " Compiling REx "(?<WORD>\b\w*a\b)(?<EXTRA>.{0,5})" Final program: 1: OPEN1 'WORD' (3) 3: BOUND (4) 4: STAR (6) 5: ALNUM (0) 6: EXACT <a> (8) 8: BOUND (9) 9: CLOSE1 'WORD' (11) 11: OPEN2 'EXTRA' (13) 13: CURLY {0,5} (16) 15: REG_ANY (0) 16: CLOSE2 'EXTRA' (18) 18: END (0) floating "a" at 0..2147483647 (checking floating) stclass BOUND minlen + 1 Freeing REx: "(?<WORD>\b\w*a\b)(?<EXTRA>.{0,5})"

The YAPE::Regex::Explain module can also offer helpful insight, but unfortunately it doesn't support regex constructs much beyond Perl version 5.6 and that's just what you're using!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://995188]
[Discipulus]: how I can tell in which perl version was included List::Util 1.29 ?
[Discipulus]: to specify use 5.0.x to be sure to have pairmap from the module..
[Corion]: Discipulus: I think Module::Corelist ( or corelist ) can tell you that
[Corion]: Meh - Module::CoreList
[choroba]: Just use List::Util 1.29
[choroba]: Be kind to people using old Perl with newer version of the module
[Corion]: But why not simply specify 'List::Util' => 1.29 in your prerequisites? People might install a more recent version of the module into their Perl
[Corion]: (what choroba said)

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (6)
As of 2017-05-25 09:19 GMT
Find Nodes?
    Voting Booth?