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

5-10 文字列の出現回数と出現順序を指定

正規表現パズル

文字列abc、文字列def、文字列ghi
がそれぞれ1回しか出現せず、
かつ
abc、def、ghiの順番で出現する行を検索する。

検索前


検索後


対象データ

abcdefghi
abcXXXdefXghi
abcXXXghiXXXdef
abcXXXdefXghXXghi
XXabcbcabdeffdghi
abcdef
abcdefghiabcdefghi
abcdefabcdef
abcXdefabXXCXXdefXghi
abcXabcXdefghi


正規表現

^(?=((?!abc).)*abc((?!abc).)*$)
 (?=((?!def).)*def((?!def).)*$)
 (?=((?!ghi).)*ghi((?!ghi).)*$).*abc.*def.*ghi.*$

別解1

^((?!abc|def|ghi).)*abc
 ((?!abc|def|ghi).)*def
 ((?!abc|def|ghi).)*ghi
 ((?!abc|def|ghi).)*$

別解2

^(?=.*abc)(?!(.*abc){2})
 (?=.*def)(?!(.*def){2})
 (?=.*ghi)(?!(.*ghi){2}).*abc.*def.*ghi.*$


解説

別解2が一番分かりやすいと思います。