・開始タグと閉じタグの間に文字列を含まない正規表現 (正規表現 否定 除く)

$_ = "ABC ABC DEF ABCDEF";

while ( m/
# Perl 5.10 以降で有効
ABC
[^ADX]* # 先頭の文字を使った高速処理
(?:
(?:
DEF (*ACCEPT) # マッチ成功
|\K ABC # 今までマッチした文字列を捨ててリスタート
|XYZ (*PRUNE) (*SKIP) (*F) # NGワード検出、マッチ失敗
|. # ↑の3つ以外の1文字
)
[^ADX]*
)*
(*COMMIT) (*F) # DEFで閉じられないまま終端に到達。
/xgsiaap )

{ print "match! <${^MATCH}>\n"; }

# NGワード、開始タグ、閉じタグの競合は想定していない。
# 例、NGワード="</" 、 閉じタグ="</div>"