in reply to Regular expressions mystery

It 'worked' for me. You might want to let us know what you are trying to capture or accomplish and show a complete program.

use warnings; use strict; foreach my $str ( 'LLLLLLLLLLLLLLLLLLLOOOOOOOOOOOOO', 'LLLLLLLLLLCOOOO +OOOOOOOOOOOOOOOOOO' ){ if($str=~/^(L+)/ or $str=~/^(L+C)/) { print "matched '$1'\n"; } } __END__ matched 'LLLLLLLLLLLLLLLLLLL' matched 'LLLLLLLLLL'

Replies are listed 'Best First'.
Re^2: Regular expressions mystery
by AnomalousMonk (Archbishop) on Jul 01, 2018 at 13:28 UTC

    AnonyMonk:   Note that you will never capture the  C character in the string (if this is what you want to do) because the  $str =~ /^(L+)/ expression will always match first in
        if ($str =~ /^(L+)/ or $str =~ /^(L+C)/) { ... }
    for the strings you give as examples. If you want the  C captured, reverse the order of the matches
        if ($str =~ /^(L+C)/ or $str =~ /^(L+)/) { ... }
    or much better yet IMHO, just use a single regex with an optional  C match
        if ($str =~ /^(L+C?)/) { ... }
    (See the  ? quantifier in perlre.)


    Give a man a fish:  <%-{-{-{-<

      Thank you very much! Good point