Memos About Salesforce

Salesforceにハマってたこと!

正規表現及びPattern と Matcher の使用

SFDCも正規表現があり、

さらに正規表現を使用してテキストを検索できる Pattern と Matcher があります

今回、これらを使う時に発生したエラーを共有します。

それの解消方法も

欲しけりゃくれてやる・・・。

探せ!

この世の全てをそこに置いてきた〜笑

目次

使用例

一般的に

すべての正規表現は文字列として指定されます。

ほとんどの正規表現は、まず Pattern オブジェクトにコンパイルされます。

String split メソッドのみがコンパイルされていない正規表現を扱うことができます。

一般的に、正規表現を Pattern オブジェクトにコンパイルすると、

Pattern オブジェクトが使用されるのは Matcher オブジェクト作成時の 1 回のみです。

その他の処理は Matcher オブジェクトを使用して実行されます。次に例を示します。

//パターンのインスタンス 
Pattern MyPattern = Pattern.compile('a*b');

// マッチャーのインスタンス
Matcher MyMatcher = MyPattern.matcher('aaaaab');

// 結果確認
System.assert(MyMatcher.matches());
正規表現を 1 回

正規表現を 1 回のみ使用する場合は、

Pattern クラスの matches メソッドを使用すると、

表現のコンパイルと文字列に対するマッチ処理を 1 回の呼び出して実行できます。

たとえば、次のコードは上記のコードと同一です。

Boolean Test = Pattern.matches('a*b', 'aaaaab');
System.debug('Result is--->' + Test);

エラー例

String value = NULL;
Boolean Test = Pattern.matches('a*b', value );
System.debug('Result is--->' + Test);
エラーメッセージ

MSG:System.NullPointerException: Script-thrown exception

エラーの解消方法

マッチしたい文字列の値を処理する前にチェックする
String value = NULL;
if(String.isNotEmpty(value )){
    Boolean Test = Pattern.matches('a*b', value );
    System.debug('Result is--->' + Test);
}