Если вам действительно нужно регулярное выражение single , то оно будет очень большим и очень медленным из-за возврата.Для вашего конкретного примера (Джон и Барбара) И (Счастливый или Грустный) это начнется так:
\bJohn\b.*?\bBarbara\n.*?\bHappy\b|\bJohn\b.*?\bBarbara\n.*?\bSad\b|......
В конечном итоге вам нужно будет поместить все комбинации в регулярное выражение.Что-то вроде:
JBH, JBS, JHB, JSB, HJB, SJB, BJH, BJS, BHJ, BSJ, HBJ, SBJ
Снова откат назад был бы недопустимым, как и взрыв в ряде случаев.Держитесь подальше от регулярных выражений здесь.