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.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.