That was a poorly worded Q you responded to. To be clear, it was a muse, rather than write "4 or 8 hex chars" other longer ways. You saw a 2nd interpretation that I had dismissed:
-
Doing bitwize-or: {4|8} = {12}; gives only 1 match-length, which is already doable '{12}'
-
Doing match-length-alternation, insofar as it allows multiple lengths to be given, seems more useful.
| [reply] |
If alternation worked in quantifiers, you'd want to put the eight first. The regex engine may be greedy, but it's also hasty. As soon as it matches an alternate it forgets about the remaining ones. Anything that would match the eight has already matched the four.
Translating to the intended regex,
$_ = "abc" x 4;
$re_short = qr/([0-9a-f]{4}|[0-9a-f]{8})/;
$re_long = qr/([0-9a-f]{8}|[0-9a-f]{4})/;
print $1, $/ if /$re_short/;
print $1, $/ if /$re_long/;
__END__
abca
abcabcab
| [reply] [d/l] |