【Salesforce】【Apex】正規表現でテキスト内から指定文字列を複数取得する
きっかけ
テキストエリア項目の中に不定なフォーマットで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
いい感じに取れました!
項目に転記するなどの処理は戻り値listをfor文で回したり適宜どうぞ。
参考
Author And Source
この問題について(【Salesforce】【Apex】正規表現でテキスト内から指定文字列を複数取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/piepie1231/items/1596488fde02dfb58699著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .