LoginSignup
1
1

More than 1 year has passed since last update.

【Salesforce】【Apex】正規表現でテキスト内から指定文字列を複数取得する

Last updated at Posted at 2021-06-02

きっかけ

テキストエリア項目の中に不定なフォーマットで5桁数値キーが複数入っているので
そのキーを1つずつキー1~キー50の項目にセットしてほしい。

という感じのご要望があったので実装しました。ApexにもPatternクラスがあるのでこれを使用します。

今回は 正規表現でテキストの中から指定文字列を取得し、指定文字列リストを返すメソッド の紹介です。

Patternクラス(正規表現)を使用した処理については、もう一つ記事を書いていますのでこちら↓もご参考ください。
【Salesforce】【Apex】正規表現で年月テキストから月末日を取得する

仕様

テキストエリア項目の値(不定フォーマット5桁数値キー)の例
ID:32541 ID:32542 ID:32543 ID:32544 ID:32545
キー発行20331,20332,20333,20334
①53452②53453③53454
株式会社ぴえぴえ商事様のキーは78891です。

これらの値を引数にいれて、正規表現で5桁数値を取得しリストに格納し返します。

コード

メソッドを置いておきます。
使用したいクラスにコピペして呼び出せば使用できると思います。
正規表現は取りたい値によって直してください。

public static List<String> getKeyList(string text){

    // 5桁数値の正規表現
    String regex = '(\\d{5})';

    // 正規表現をPatternにコンパイルし、textに一致するMatcherを作成する
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(text);

    List<String> keyList = new List<String>();
    while(m.find()){
        // マッチした文字列をリストに追加
        keyList.add(m.group());
    }

    return keyList;

}

while(m.find())で次のマッチを探しています。

Patternクラスのリファレンスから引用です。find()について

このメソッドは Matcher オブジェクトのリージョンの最初から開始します。または、前のメソッド呼び出しが成功し、Matcher オブジェクトがそれ以降リセットされていない場合、前のマッチ処理で一致しなかった最初の文字から開始します。

結果

例に挙げた値を渡して匿名実行し、system.debug(keyList)したログを載せておきます。

ID:32541 ID:32542 ID:32543 ID:32544 ID:32545
image.png

キー発行20331,20332,20333,20334
image.png

①53452②53453③53454
image.png

株式会社ぴえぴえ商事様のキーは78891です。
image.png

いい感じに取れました!
項目に転記するなどの処理は戻り値listをfor文で回したり適宜どうぞ。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1