Какой движок регулярных выражений?
Обычно это решается путем сопоставления обоих списков того, что нужно / не нужно.
Есть способы сделать это с помощью утверждений, но это не универсально.
Если вы используете PCRE или Perl, вы можете использовать глаголы возврата для skip the
нежелательные вещи автоматически.
Например (?:her_cup|her_table|his_car|his_bik)(*SKIP)(*FAIL)|(?:his|her)
https://regex101.com/r/wv7qPo/1
В противном случае вам придется сопоставить оба цикла и использовать группу захвата в качестве
флаг, чтобы увидеть, если вы подходите.
(?:her_cup|her_table|his_car|his_bik)|(his/her)
Основное правило: вы должны соответствовать чему-то, чтобы пройти мимо него, в противном случае
части нежелательных подстрок могут быть включены в хорошие подстроки.