Your OP node title specifically refers to combining regexes, so here's an approach that decomposes what seem to be the essential elements of your regex and re-combines them to form the final matching regex. I find a decompositional approach makes it easier to think about a regex (especially a complex one) when writing it, and to maintain it later. (Note: Some of your StackOverflow examples have leading characters before the $mir pattern. If this is really the case, eliminate the \A absolute-beginning-of-string anchor from the matching regex.)
Another Note: If it's just a matter of excluding anything matching <EXP-N-\d+> then BrowserUk's 'simpler' solution here is by far the best.
>perl -wMstrict -le "my @strs = qw( <MIR-1><EXP-V-3><VACCVIRUS-PROP-1> <MIR-1><ASSC-PHRASE-1><VACCVIRUS-PROP-1><PATTERN-1> <MIR-1><EXP-V-0><ART-0><VACCVIRUS-PROP-1> <MIR-1><EXP-V-0><ART-0><BE-V><VACCVIRUS-PROP-1> <MIR-1><EXP-V-0><EXP-N-0><VACCVIRUS-PROP-1> ); ;; my $tail = qr{ \d+ > }xms; ;; my $mir = qr{ < MIR- $tail }xms; my $exp_v = qr{ < EXP-V- $tail }xms; my $exp_n = qr{ < EXP-N- $tail }xms; my $assc_phr = qr{ < ASSC-PHRASE- $tail }xms; my $vaccvir = qr{ < VACCVIRUS-PROP- $tail }xms; ;; for my $str (@strs) { print qq{'$str'} if $str =~ m{ \A $mir (?: $exp_v (?! $exp_n) | $assc_phr ) .*? $vaccvir }xms; } " '<MIR-1><EXP-V-3><VACCVIRUS-PROP-1>' '<MIR-1><ASSC-PHRASE-1><VACCVIRUS-PROP-1><PATTERN-1>' '<MIR-1><EXP-V-0><ART-0><VACCVIRUS-PROP-1>' '<MIR-1><EXP-V-0><ART-0><BE-V><VACCVIRUS-PROP-1>'
In reply to Re: Combining Regex
by AnomalousMonk
in thread Combining Regex
by neversaint
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |