in reply to Conditional matching into qr variable
The problem is that you have .? after the negative lookahead, which means the regex can: NOT match either of your two words with 'ild ' or 'oderate ', then ignore the . because it is optional and then match 'active'.
Now, you might think that just removing the ? would force it to work by matching the space (I did initially), but: when the preceding word is 'mild', it can match that by NOT matching the word moderate; and vice versa, so still every instance of active will match.
This works (though it will also (for example) not match 'elaborate active' should that appear):
my $re = qr[(?<!mild|rate)\s+active];
Negative lookbehinds have to be fixed length (hence the truncation of moderate).
Update: rather than risking mismatches caused by the truncation of the longer word, you could pad the shorter word:
my $re = qr[(?<!....mild|moderate)\s+active];
if you think that will be less likely to cause mismatches.
|
|---|