Используйте
(?i)^(?:(?!foo|bar|baz).)*\K(?:foo|bar|baz)(?!.*(?:foo|bar|baz))
См. proof .
Сопоставьте текст, который не соответствует ни одной из альтернатив до первого совпадения (^(?:(?!foo|bar|baz).)*
), опустить совпавший текст (\K
), сопоставить слово из списка ((?:foo|bar|baz)
), а затем проверить, нет ли слова из списка позже в тексте ((?!.*(?:foo|bar|baz))
).
(?i)
- без учета регистра.
Укороченная версия с подпрограммами :
(?i)^(?:(?!(foo|bar|baz)).)*\K\g<1>(?!.*\g<1>)
См. другое подтверждение
\g<1>
обозначает узор (foo|bar|baz)
.