正規表現でOR条件がどちらもヒットする時

 Javaでメール本文から正規表現で文言を抜き取るような対応をしていて、例えば

お世話になっております。
〇〇です。
××
▲▲
追伸
 ××
以上

のような文章で「お世話になっております」以降から「以上」より前の文言を抜き取っていたのを、今回、「追伸」以降もカットしたいが、「追伸」がある場合と無い場合がある、というような追加の話がありました。

元々、正規表現でマッチしたグループ1番目の文言を抜き取る形として

お世話になっております。(.*)以上

としてましたが、追伸を考慮すると

お世話になっております。(.*)(追伸.*|以上)

でいいのかなと試すと、マッチグループの1番目に「追伸」以降の箇所が含まれ、グループ2に「以上」が入ります。

ORの場合に優先順でもあるのかな?と、いろいろ調べてみると下記がとても解りやすく書いてました。

 優先順というより、最長マッチによりこうなっているのですね。という事で、最短マッチにすればOKという事。

 あとは最短マッチにした事で、抜き取りたい文言中に「以上」が含まれた場合に困るので、改行を見るようにして下記の正規表現としました。

お世話になっております。(.*?)(追伸.*|\n以上(\n|\r))

長年使ってますが、正規表現って難しい。。