Я не думаю, что это легко сделать без использования негативного взгляда.
Вы можете исключить определенные символы, используя соглашение [^abc]
. Однако вам придется явно исключить cat, но затем разрешить все, что почти cat.
Например,
((hello)ca[^t]|(hello)c[^a]|(hello)[^c])
Затем получить захваченную группу в пределах, соответствующей группе hello
. Пробелы после приветствия и выбора этой опции делают ее немного сложнее. Этот необязательный пробел может быть захвачен следующим образом:
((hello)\sca[^t]|(hello)\sc[^a]|(hello)\s[^c]|(hello)ca[^t]|(hello)c[^a]|(hello)[^c ])
Примечание: у него есть все шесть опций, а последний добавляет необязательный пробел, чтобы гарантировать, что первые три не будут захвачены.
Проверено здесь: https://regex101.com/r/sgoHyJ/1
Полагаю, вы можете понять, почему они изобрели негативные прогнозы ...