4. 指定文字列内の、指定文字を検索
最後は、指定文字列内の、指定文字を検索する正規表現についてです。
文字列abcのb および 文字列defのe を検索する。
対象データと期待する検索結果は、下記となります(黄緑色が検索にヒットした部分です)。
![対象データと期待する検索結果 対象データと期待する検索結果](http://cz-cdn.shoeisha.jp/static/images/article/2676/fig10.gif)
この問題のポイントは、文字bをどのようにして文字列abcのbか判断するかと、文字eをどのようにして文字列defのeか判断するかです。前後の文字を判定すればいいと考えて、答えは下記となります。
(?<=a)b(?=c)|(?<=d)e(?=f)
肯定戻り読みと肯定先読みを使い、
前の文字がa、かつ、次の文字がcの、文字b または 前の文字がd、かつ、次の文字がfの、文字e
を検索しています。正規表現のイメージは下記となります。
![正規表現のイメージ 正規表現のイメージ](http://cz-cdn.shoeisha.jp/static/images/article/2676/fig11.gif)
最後に
今回は、筆者が運営するサイト『正規表現パズル』の、応用編の正規表現を扱いました。実際にEmEditorで試すと学習効率が高いでしょう。
次回の正規表現の問題集は、発展編となる予定です。
参考資料
- 『詳説 正規表現 第3版』 Jeffrey E.F. Friedl 著、長尾高弘 訳、オライリー・ジャパン、2008年4月
正規表現を作成する際の考え方が詳細に書かれている本です。本稿で使用している正規表現の用語は、この本と同じ用語を使ってます。
- 正規表現パズル 『IPの前ゼロを削除』
本稿の「1. IPの前ゼロを削除」で扱った正規表現と別解を置いてます。
- 正規表現パズル 『カンマ区切りの金額を検索』
本稿の「2. カンマ区切りの金額を検索」で扱った正規表現を置いてます。
- 正規表現パズル 『否定先読みで条件チェック』
本稿の「3. 否定先読みで条件チェック」で扱った正規表現を置いてます。
- 正規表現パズル 『指定文字列内の、指定文字を検索その1』
本稿の「4. 指定文字列内の、指定文字を検索」で扱った正規表現と別解を置いてます。