正規表現パターンを構築するときは、マッチング結果の精度だけでなく、その実行効率も考慮する必要があります。
一般的なシナリオ
シナリオ1:3桁の市外局番と7桁の番号で構成される北米の電話番号ハイフンで区切ります)。各番号は任意の番号にすることができますが、市外局番とオフィスコードの最初の桁を0または1にすることはできません
テキスト:ル:248-555-1234
ベン:(313)555-1234
ディー:(810)555-1234
正規表現:\(?[2-9] \ d \ d \)?[-]?[2-9] \ d \ d- \ d {4}
分析:最初の\(?、エスケープ(、の括弧と一致できます(、?括弧があるかどうかを意味します
最初の1は1または0ではないため、すべて[2-9]を取り、\ dは他の任意の数です
\)の後ろ?末尾のブラケットはオプションです
[-]?3つのケースを表します。スペースの場合もあれば、直接の場合もあれば、直接の場合もありません。その後に基本的な数値の一致が続きます。{4}は4回繰り返すことを意味します
しかし実際には、上記は十分に包括的ではなく、たとえば、888)222-1234が片側のみの場合)、正常に照合されます。
だから(\()?[2-9] \ d \ d(?(1)\)|-)[-]?[2-9] \ d \ d- \ d {4}に変更する理由がわからない質問、アイデアは条件付きクエリを実行することです
中国の固定電話番号も同様です。
ルール:最初は0が固定されています。これは長距離を意味し、2、3、4桁の市外局番、7桁または8桁の電話番号が続きます。
正規表現:\(?0 [1-9] \ d {1,3} \)?[-]?[2-9] \ d {2,3} [-]?\ D {4}