メニューボタン
IBMi海外記事2022.10.26

正規表現、パート2

Mike Larsen 著

この記事シリーズのパート1では、SQLおよび正規表現を使用してストリング内の文字を置換する方法を紹介しました。パート2では、利用可能なその他の正規表現をいくつか紹介しようと思います。ここで紹介する正規表現関数は、REGEXP_COUNTとREGEXP_LIKEで、それらの例は、先日、私が実装した本番プログラムから引用したものです。

1つ目の例では(図1)、ストリング内で、ある正規表現パターンが出現した回数を取得しようとしています。より興味深いものにするために、ストリング内で異なる2つのパターンを検索するようにしています。この目的を実現するために、REGEXP_COUNTを使用して、そのパターンがストリング内で出現する回数を取得しました。

図1. ストリング内でのあるパターンの出現回数の取得

このステートメントの結果を示す前に、使用されている引数について細かく分けて見てみましょう。1つ目の引数は、その中で検索が行われるストリングです。本番プログラムでは、これはおそらく、ファイルや表からの変数またはフィールドとなるでしょう。2つ目の引数は、そのストリング内で見つけようとしているものを示します。このケースでは、「CR」または「GS」のいずれかを検索します。パイプ記号(|)が使用され、これが「or(または)」ステートメントであることを示しています。3つ目の引数は、これらのパターンの検索を、ストリングの先頭の位置から開始するように関数に指示しています。最後に、ここで指定した最後の引数は、検索される文字の大文字小文字が区別されないようにすることを示しています。このステートメントの結果を図2に示します。

図2. REGEXP_COUNT関数の結果

次の例では、REGEXP_LIKE関数を紹介します(図3)。この関数では、ストリングで、あるパターンが存在するかどうかをチェックしています。パターンが見つかると、関数は「Y」を返します。パターンが見つからない場合はブランクを返します。1つ目の例で使用したのと同じストリングを使用して、この関数について見てみましょう。

図3. REGEXP_LIKE関数

提供される引数はREGEXP_COUNTで使用したものと同じであるため、ここでは説明を省きます。このステートメントを実行すると(図4)、それらのパターンがストリング内に見つかるため、「Y」が返されます。

図4. REGEXP_LIKE関数の結果

では、パターンが見つからない場合はどうなるでしょうか。そのシナリオを図5に示します。

図5. REGEXP_LIKE関数

このステートメントを実行すると、ブランクが返されます(図6)。

図6. REGEXP_LIKE関数の結果

最後の例は、住所フィールドの先頭に「DBA」という文字がある顧客を識別するために書いた照会から引用したものです。一見すると、これは単純な要求のように思えますが、ひと癖あります。このフィールドは、データ入力プロセス時に、「DBA」、「D/B/A」、「(DBA)」、「DBA:」など、様々なパターンで入力されている可能性があります。これらの顧客を識別するために、図7に示すステートメントを書きました。

図7. 住所フィールドに「DBA」がある顧客の識別

プライバシー保護のため、照会ではライブラリー、表名、およびフィールド名を匿名化しました。また、結果では会社名も匿名化しています(図8)。

図8. 顧客照会の結果

この記事シリーズで紹介した例を、正規表現を使い始める際の参考にしていただけたら幸いです。正規表現は、プログラミングを行う上で非常に有用だと思います。今後も、使用すると効果的な場面では存分に活用しようと思っています。自分にとって利用しやすいツールが増えるのは、いつでも嬉しいものです。

あわせて読みたい記事

PAGE TOP