>>331
すみませんでした
(クリスマス|お盆|正月)の3つの単語を全て含む文字列の最長マッチと書くべきでした
(クリスマス|お盆|正月).*?(クリスマス|お盆|正月).*?(クリスマス|お盆|正月)
では最長3単語まででお盆という単語を含まなくてもマッチしてしまいます

>>332
>その2
というのが何をさすのかすみません分かりませんでした
var := "クリスマス任意の文字列お盆任意の文字列正月任意の文字列お盆任意の文字列正月任意の文字列クリスマスzzzz盆zzzzz盆zzzzzzz盆zzzzzzzzzzzお盆"
pos := RegExMatch(var, "s)(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)", $)
MsgBox,,, pos%pos% %$%, ;マッチ $=var全体
pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)(?:お?盆|クリスマス|正月).*(?:お?盆|クリスマス|正月)", $)
MsgBox,,, pos%pos% %$%, ;行頭^記号ありでもマッチしました $=var全体

これでお盆が含まなければマッチせず、全ての単語が含まれるとき期待通りになりました。有難うございました

ただ、対象文字列の1文字目が(クリスマス|お盆|正月)以外で始まるケースではマッチしませんでした
最初に書いたこれなら1文字目を問わずマッチするのですがやはり全体が拾えず……。
pos := RegExMatch(var, "s)^(?=.*?お?盆)(?=.*?クリスマス)(?=.*?正月)", $)

var := RegExReplace(var, "^.*?(?=クリスマス|お?盆|正月)", "")
のように1文字目が必ず指定した単語のどれかになるように修正してから使わせていただきます
お世話になりました。