Hi, I have a question/problem regarding regex. So I have a hash of hashes containing strings. The strings each contain some characters, some digits and at the end it contains either one of the suffixes "AAA", "BBB" or "CCC". By using loops and regex I'm trying to access each piece of information and print messages depending on the suffix of each string. The part of the code I'm having problems with looks something like this:

my %hash; # hash of hashes already defined and filled in an earlier pa +rt of code foreach (sort keys %{$hash{$key1}}){ if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+AAA/gi){ print "found1\n"; } if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+BBB/gi){ print "found2\n"; } if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+CCC/gi){ print "found3\n"; } }

I found that the regex has no problem with the data entries containing the suffixes "BBB" and "CCC" but all the suffixes with "AAA" are ignored. So the output looks like this:

found2 found3 found2 found3 ...

I found that if I just copied the 'if' block for the "AAA" suffixes and pasted it directly after the first section, the first regex still doesn't match, but the second one does:

foreach (sort keys %{$hash{$key1}}){ if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+AAA/gi){ print "found1\n"; } # copied from above and changed the output to 'foundx' if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+AAA/gi){ print "foundx\n"; } # if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+BBB/gi){ print "found2\n"; } if ($hash{$key1}{$_}=~ /^.+_(\d+)_.+CCC/gi){ print "found3\n"; } }

The output is as follows:

foundx found2 found3 foundx found2 found3 ...

I have no clue what's going on here... Any help would be appreciated. Thanks!


In reply to regex problem: doesn't work on the first search but works on the second by onlyauto

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.