SalesforceのMatcherクラスとは?使用方法に実装例とともに解説!
IT・技術関連
更新日:2024.09.05


SalesforceのMatcherクラスとは?
SalesforceのApexクラスで「正規表現を利用した文字列検索をしたい」とお考えの方も多いでしょう。SalesforceのMatcherクラスを利用することで、正規表現を利用して文字列を検索可能です。また、正規表現や検索キーワードはPatternクラスで設定します。
SalesforceのMatcherクラスとPatternクラスの動作は、JavaのMatcherクラスとPatternクラスに基づいた動作をします。また、SalesforceのApexの正規表現についてもJavaの正規表現をベースとした動作です。
ただし、Salesforceでは正規表現の入力シーケンスへのアクセス可能回数が、1,000,000回までという制限を設けています。もし、1,000,000回を上回った状態でMatcherクラスを利用した場合、ランタイムエラーが発生します。そのため、過度な利用には注意が必要です。
Matcherクラスのメソッドの使用方法を解説

正規表現で文字列をチェックする方法
Patternクラスで正規表現・検索対象の文字列を設定し、Matcherクラスで文字列の検索を行います。 例)「aから始まりzで終わる」文字列が検索対象にあるか、判定// Pattern#compile()で「aから始まりzで終わる文字列」という正規表現を設定
Pattern pattern1 = Pattern.compile('a*z');
// Pattern#matcher()で検索対象の文字列「abcdefz」を設定
Matcher matcher1 = pattern1.matcher('abcdefz');
// Matcher#matches()で検索対象の文字列に正規表現が該当するか判定
// 検索対象の文字列が正規表現の「aから始まりzで終わる文字列」に該当するためtrueが返却される
System.assert(matcher1.matches());
Pattern#compile()で設定した正規表現を他の処理で利用しない場合は、Pattern#matches()を利用して上記の実装例と同じ処理を次のようなコードで実装することも可能です。
// Pattern#matches()の第1引数に正規表現を、第2引数に検索対象文字列を設定
System.assert(Pattern.matches('a*z', 'abcdefz'));
キャプチャグループを利用する方法
JavaのMatcherクラス同様にキャプチャグループを利用することが可能です。キャプチャグループは左から右へ左括弧の数で0番から番号が付与されます。例えば正規表現に「((さ)(か)) 」と設定した場合、次のグループができます。 0.((さ)(か)) 1.(さ) 2.(か)// Pattern#compile()で「さかを含む文字列」という正規表現を設定
Pattern pattern2 = Pattern.compile('((さ)(か))');
// Pattern#matcher()で検索対象の文字列「さかな」を設定
Matcher matcher2 = pattern2.matcher('さかな');
// 正規表現に該当した検索対象文字列を取得
System.Debug(""全体 :"" + matcher2.group()); // 「全体 :さか」が出力される
System.Debug(""Group0:"" + matcher2.group(0)); // 「Group0:さか」が出力される
System.Debug(""Group1:"" + matcher2.group(1)); // 「Group1:さ」が出力される
このように、キャプチャグループごとに文字列を取得することが可能です。
文字列の検索範囲を絞ってチェックする方法
Matcherクラスでは、検索対象を文字列の開始位置と終了位置を設定できます。String str = ""This cat weigh 4kg, but this dog weigh 30kg."";
// Pattern#compile()で「kgの前に数字がある文字列」という正規表現を設定
Pattern pattern3 = Pattern.compile('¥¥d+kg');
Matcher matcher3 = pattern3.matcher(str);
int start = matcher3.regionStart(); // 文字列の開始インデックス
int end = matcher3.regionEnd(); // 文字列の終了インデックス
// 「検索対象の範囲 : This cat weigh 4kg, but this dog weigh 30kg.」が出力される
System.Debug(""検索対象の範囲 :"" + str.substring(start, end));
// 「該当箇所:4kg」が出力される
System.Debug(""該当箇所:"" + matcher3.group());
// 検索対象の範囲(リージョン)に開始インデックスを20で設定
matcher3.region(20, end);
// 「検索対象の範囲 :but this dog weigh 30kg.」が出力される
System.Debug(""検索対象の範囲 :"" + str.substring(20, end));
// 「該当箇所:30kg」が出力される
System.Debug(""該当箇所:"" + matcher3.group());
このように検索対象の範囲を変更することで、該当箇所の結果に違いを出すことが可能です。
アンカー設定境界を設定する方法
Matcher#region()で検索範囲を変更したことにより、ラインアンカー(^または$など)を使った正規表現に該当することがあります。例えば、「This cat weigh 4kg.」の検索範囲を「cat weigh 4kg.」に設定した場合、正規表現のcatから始まる文字列(^cat)に該当します。 そこで、文字列検索の前でMatcher#useAnchoringBounds ()の引数に「false」を指定し実行します。そうすることで、検索対象の範囲の影響を受けず、ラインアンカーを含む正規表現で文字列検索できます。String str = ""This cat weigh 4kg."";
// Pattern#compile()で「catから始まる文字列」という正規表現を設定
Pattern pattern4 = Pattern.compile('^cat');
Matcher matcher4 = pattern4.matcher(str)
// 検索対象の範囲(リージョン)に開始インデックスを5で設定
matcher4.region(5, matcher4.regionEnd());
// 「検索対象の範囲 :cat weigh 4kg.」が出力される
System.Debug(""検索対象の範囲 :"" + str.substring(5, end));
// アンカー付き境界をnon-anchoring境界に設定
matcher4.useAnchoringBounds(false);
// non-anchoring境界に設定したため、検索対象の範囲に関係なく、
// 検索対象の文がcatから始まる文字列かを判定する
if (matcher4.matches()) {
// catから始まる文字列の場合
System.Debug(""〇"");
} else {
// catから始まる文字列でない場合
// 検索対象の文は「cat」の前に「This 」があるため、「×」が出力される
System.Debug(""×"");
}
Matcherクラスを使って、文字列検索してみよう

この記事の監修者・著者

- AWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
-
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。
・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
最新の投稿
- 2024-12-27営業インタビュー情報共有の活性化の中心に。SP企画部の新たな取り組み
- 2024-07-01営業インタビュー最短で当日にご提案可能。 OPE営業の対応が早い3つの理由
- 2024-07-01営業インタビュー研修見学ツアーが高評価!「お客様のOPEに対する期待を高め、継続に貢献できればと思います。」
- 2024-07-01営業インタビュー信頼関係を構築し、エンジニアの長期就業へ
ITエンジニアの派遣を利用したい企業様へ

- 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
- すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!
オープンアップITエンジニアをご検討ください!
当社のITエンジニア派遣サービスは
- 派遣スピードが速い!(最短即日)
- 4,500名のエンジニアから貴社にマッチした人材を派遣
- 正社員雇用も可能
こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。