正規表現で複数パターンの論理積「AND」で検索する

yahoo知恵袋で次の質問投稿がありました。

正規表現で何々が含まれない行だけでなく、何々が含まれて何々は含まれない行の両方指定はどう書けば行けますでしょうか?

以下例文です。
"つがる市"と""弘前市は含まれないが"青森県"か"秋田県"は含まれる行という行程と否定の両指定です。

マッチ
青森県は今日も良い天気です。
秋田県はお米が採れます。

マッチしない
青森県の弘前市はリンゴの産地です。

テキストエディタの秀丸、サクラエディタなどの一般正規表現です。
よろしくお願いいたします。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14257339024?__ysp=5q2j6KaP6KGo54%2B%2B

回答として以下の正規表現が載っていました。
^(?=.*(青森県|秋田県))(?!.*(弘前市|つがる市)).*$

【正規表現の解釈】
まず、^(?=.*(青森県|秋田県))の部分では、行頭から前方方向に向かって青森県または秋田県を検索し、見つかれば行頭位置がマッチします(肯定先読み)。
上記でマッチした場合、^(?!.*(弘前市|つがる市))を実行することになります。すなわち、行頭から前方方向に向かって弘前市またはつがる市を含むかをチェックし、含まなければ再度行頭位置がマッチします(否定先読み)。
上記でマッチした場合、^.*$でマッチングすることになります。この正規表現はどんな行でも行全体がマッチします。

【アンカーについて】
アンカーとは文字列内の特定の位置を表すものです。^ や $ もアンカーです。普通の正規表現では文字に対してマッチしますが、アンカーは位置に対してマッチします。肯定先読みや否定先読みはアンカーであり、マッチするのは文字ではなく位置です。

この正規表現の正当性をチェックサイトで確認しました。
https://regexr.com/
図の下二行は、検証のため追加したものです。反転表示がヒットした文字列を示しています。
期待どおりにマッチングできています。

さらに、このyahoo知恵袋の質問投稿者は次の追加質問を投稿していました。

1行まるごとではなく、途中の部分だけをマッチさせたい場合はどう書けば行けますでしょうか?

たとえば▼から◆の範囲までとします。
よろしくお願いいたします。

例文
弘前市ここここ▼青森県は今日も良い天気です。◆たたたたつがる市

マッチ
▼青森県は今日も良い天気です。◆

▼(?=.*(青森県|秋田県))(?!.*(弘前市|つがる市)).*◆
これだと1行丸ごとしかマッチせず途中からの部分はマッチしませんでした。

質問者は最後に「これだと1行丸ごとしかマッチせず」と書いていますが、この記載は誤りと思われます。
以下の【正規表現の解釈】で示すように、上の赤字で示している正規表現では、1行まるごとどころか全くマッチしません。

【正規表現の解釈】
まず、▼(?=.*(青森県|秋田県))の部分は▼の位置(正確には「▼」と「青」の間の位置)がマッチします。
次に、▼(?!.*(弘前市|つがる市))が評価されます。このとき、.*(弘前市|つがる市)の部分が◆を超えて行末まで検索してしまい「青森県は今日も良い天気です。◆たたたたつがる市」にマッチします。否定先読みなので結果としてアンマッチとなります。

この質問に対しては、以下の正規表現で正しく動作すると思われます。先読み時に◆を超えないようにしています。
▼(?=.*(青森県|秋田県).*◆)(?!.*(弘前市|つがる市).*◆).*◆
追加検証のため、▼と◆の間に否定先読み対象の弘前市を含むパターンを追加し、マッチしないことを確認しました。

関連ページ