トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

2-22 文字列ABCで囲まれた最後の文字列を検索

正規表現パズル

行ごとで、
文字列ABCで囲まれた最後の文字列を検索する。

検索前


検索後


対象データ

ABCXYZABC
ABCABCXYZABC
ABCABCXYZ
XYZABCABC123456ABC
XYZABCABC123456ABC789ABC
XYZABCABC123456ABCABC


正規表現

(?<=ABC)(?=((?!ABC).)*ABC((?!ABC).)*$).+(?=ABC)

別解1

(?<=ABC)((?!ABC).)+(?=ABC(?!.*ABC))

別解2

(?<=ABC)(?=.*ABC)(?!(.*ABC){2})((?!ABC).)+


解説

肯定先読みの中で否定先読みを使ってます。

別解2では、
前方にあるABCの数は1以上である。かつ、前方にあるABCの数は2以上ではない。
⇔
前方にあるABCの数は1である。

という連立不等式をふまえた同値命題を使ってます。