Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Complex regex question

by Athanasius (Archbishop)
on Sep 25, 2019 at 06:39 UTC ( [id://11106666]=note: print w/replies, xml ) Need Help??


in reply to Complex regex question

Hello Cody Fendant,

Your regex is actually working correctly: in the alternation m{ (\d+) (a|b) | (a|b) (\d+) }gx, the 4 captures are assigned to $1, $2, $3, and $4, even though only 2 of the 4 matches are possible in any particular instance (hence, you will always get 2 undef results). To avoid this behaviour, you can use the Extended Pattern (?|pattern) (from Perl 5.10.0 on):

use strict; use warnings; use Data::Dumper; $Data::Dumper::Indent = 0; my $string_three = 'foo bar [21a] plus (b23) baz bax'; my @string_three_results = $string_three =~ / (?| (\d+) (a|b) | (a|b) +(\d+) ) /gx; print 'RESULTS: ', Dumper(\@string_three_results), $/;

Output:

16:38 >perl 2020_SoPW.pl RESULTS: $VAR1 = ['21','a','b','23']; 16:38 >

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11106666]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (5)
As of 2024-04-25 10:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found