KB)プログラム言語やSQL、テキストエディタで使用可能な「正規表現」を使う際の、考え方と処理のイメージを、具体的な例題を交えて解説します。第1回は肯定先読み・肯定戻り読みの使い方を紹介します。最後に参考資料はじめに筆者が運営するサイト『正規表現パズル』で扱っている、正規表現の問題とその答えを、EmEditorの正規表現を使って解説していきます。第3版』を一読された方。6.00.4で動作確認しました。その他、プログラム言語やSQLやテキストエディタなどでも応用できます。文字列cdを含む行を検索する。対象データと期待する検索結果は、下記となります(黄緑色が検索にヒットした部分です)。単純に個々の条件を組み合わせると、3の階乗である3*2=6通りの順列に対応する正規表現をつないだ、次のようなパターンが考えられます。(エディタには1行で入力してください)^.*ab.*bc.*cd.*$|^.*ab.*cd.*bc.*$|^.*bc.*ab.*cd.*$|^.*bc.*cd.*ab.*$|^.*cd.*ab.*bc.*$|^.*cd.*bc.*ab.*$しかし、このパターンは5行目にはマッチしますが、1行目と7行目にマッチしないので、間違いです。文字列abと文字列bcに、bという共通文字があるのが、この問題のポイントです。答えは、肯定先読みを使用して下記となります。答え^(?=.*ab)(?=.*bc)(?=.*cd).*$肯定先読みは、指定したパターンが先に存在する位置にマッチします。(?=yz)は次にyzがある位置にマッチしますので、検索対象がxyzであれば、文字xと文字yの間の位置にマッチします。^(?=.*ab)(?=.*bc)(?=.*cd).*$のように、肯定先読みを連続して使っている場合は、行頭にマッチして、その後.*abがある位置にマッチして、その後.*bcがある位置にマッチして、その後.*cdがある位置にマッチして、その後.*$にマッチすると考えてもいいですが、行頭、かつ.*abがある、かつ.*bcがある、かつ.*cdがある位置からの.*$にマッチすると考えた方が分かりやすいでしょう。言いかえると、肯定先読みを連続して使うとそれらの論理積が真となる位置にマッチするということです。正規表現のイメージは、下記となります。OracleSQLパズルの運営者。AtCoderレーティングは1204(水色)。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。