Я не правильно понимаю проблему:
Если вы хотите сопоставить "great" или "reat", вы можете выразить это следующим образом:
"g?reat"
Это просто говорит о том, что часть "reat" должна существовать, а "g" необязательна.
Это будет соответствовать "reat" и "great", но не "eat", потому что требуется первый "r" в "reat".
Если у вас тоже есть слова «отлично» и «хорошо», и вы хотите сопоставить их оба с необязательным «g», вы можете написать это так:
(g?reat|g?ood)
А если вы хотите включить границу слова, например:
\b(g?reat|g?ood)
Вы должны знать, что это не будет совпадать с чем-то вроде «дышать», потому что у вас есть «reat», но «r» не находится на границе слова из-за «b».
Поэтому, если вы хотите сопоставить целые слова, содержащие ссылку на подстроку «reat» или «ood», вам следует попробовать:
"\b\w*?(reat|ood)\w+\b"
Это гласит:
1. Начиная с границы слова, начинайте сопоставлять любое количество слов-символов, но не будьте готовы.
2. Совпадение «reat» или «ood» гарантирует, что сопоставляются только те слова, которые содержат одно из них.
3. Сопоставьте любое количество символов слова после «reat» или «ood», пока не будет достигнута следующая граница слова.
Это будет соответствовать:
"добро", "хорошо", "ood" (если полное слово)
Это можно прочитать как: Дайте мне все полные слова, которые содержат «ood» или «reat».
Это то, что вы ищете?