Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

Apex で「Regex too complicated (正規表現が複雑すぎます)」というエラーが発生する

公開日: Sep 19, 2025
説明
※この記事は英語版を翻訳しており、一部機械翻訳を含むため内容は後日更新される可能性があります。最新の内容は英語版を参照してください。表示言語は画面右下の言語名から切り替えられます。
 

「Regex too complicated (正規表現が複雑すぎます)」というエラーが発生する原因には、どのようなものがありますか ?

解決策

発生しているエラー「System.Exception: Regex too complicated (正規表現が複雑すぎます)」は、2 つの異なるイベントで発生します。

1.Matcher が複雑すぎる。

Salesforce では、正規表現の入力シーケンスにアクセスできる回数を 1,000,000 回に制限しています。この制限に達すると、ランタイムエラーが発生します。

したがって、Matcher 文字列は 100 万文字を超えることはできません。この場合、Matcher 文字列の長さをチェックし、文字列が 100 万文字を超える場合は実行されないようにする必要があります。

2.パターンが複雑すぎる。

これは複雑なパターンの例です。

Pattern pat = Pattern.compile('(A)?(B)?(C)?(D)?(E)?(F)?(G)?(H)?(I)?(J)?(K)?(L)?(M)?(N)?(O)?(P)?(Q)?(R)?(S)?(T)?(U)?(V)?(W)?(X)?(Y)?(Z)?(AA)?(AB)?(AC)?(AD)?(AE)?(AF)?(AG)?(AH)?(AI)?(AJ)?(AK)?(AL)?(AM)?(AN)?(AO)?(AP)?(AQ)?(AR)?(AS)?(AT)?(AU)?(AV)?(AW)?(AX)?(AY)?(AZ)?$');
Matcher mat = pat.matcher('asdfasdfasdfasdfasdfasdf');

この種別のパターンは、どの文字列でも失敗します。

このように、このエラーは 2 つのオプション (上述) のうちの 1 つが原因で発生する可能性があります。経験則として、エラーが常に起こる場合は、パターンに問題があるため、解決策はパターンを単純化することです。この問題がまれに起きる場合は、Matcher が 100 万文字を超えているため、文字列を分割してから処理する必要があります。

この操作はサーバーにとって非常に時間がかかるため、この例外が検出された場合は、プロセスがすでに CPU 時間を使いすぎているため、プロセスがすぐに強制終了されます。これがエラーをトラップできない理由ですが、適切なコーディング方法を実践して、ユーザーにこのエラーが表示されないようにする必要があります。

一般的に、100 万文字のアクセス制限が発生する可能性を最小限に抑えるために、次の推奨事項の 1 つ以上を実装する必要があります。 

1.入力シーケンスを削減します。
2.入力シーケンスと比較されるパターンの数を削減、結合、削除します (特に冗長性)。
3。すべてのバッチを処理する必要がある場合は、入力シーケンスを半分に分割し、入力シーケンスを半分に切り、中間点の後の次の期間を見つけ、それを 1 つのバッチとして処理し、残りを @future コールで 2 つ目のバッチとして処理することで、ある程度の余裕を得ることができる場合があります(これは非同期の制限を受けるため、このアプローチはユースケースや利用可能な非同期コールなどに大きく依存します)。

ナレッジ記事番号

000385345

 
読み込み中
Salesforce Help | Article