2017-10-12 6 views
0

私は現在、一致する2つの正規表現を持っています。私は現在、このコードを使用していますpreg_matchを使った正規表現の結合

私はそれらのいずれかと一致する必要があります。

$string = '000.400.101'; 

$regex1 = "^(000\.000\.|000\.100\.1|000\.[36])"; 
$regex2 = "^(000\.400\.0|000\.400\.100)"; 

$result = (preg_match('/'.$regex1.'/', $string) || 
      preg_match('/'.$regex2.'/', $string)) ? 1 : 0 ; 

私はこれを短くし、少しそれをクリーンアップしたいと思います。下記の同等のようになります。

$result = (preg_match('/'.$regex1.'|'.$regex2.'/', $string)) ? 1 : 0 ; 
+0

それは正しく見える、それは動作しませんか?別々に定義された正規表現が必要ですか? – chris85

答えて

3

あなたは、次の単一の正規表現にすべてを統合しようとすることができます。そのコードを示すPHPでのデモに

000\.(?:[36]|000\.|100\.1|400\.(?:0|100)) 

Demo

$result = preg_match('/000\.(?:[36]|000\.|100\.1|400\.(?:0|100))/', $string) ? 1 : 0; 

here is a link働く

ところで、IPアドレスを正規表現する一般的な必要がある場合、この一般的な問題は既にStack OverflowとPHP内で十分にカバーされているはずです。

+0

ありがとうございます。実際にはIPアドレスではありません。 API経由で受け取ったレスポンスコード用です。これらは、クレジットカード取引の受諾または拒否のいずれかを表します。以下の実施例...
受け入れ... 000.100.111 000.100.112 000.300.000 000.300.101 000.400.000 000.400.020 下落... 000.400.102 000.400.103 000.400.104 800.100.100 800.100.150 800.100.151 私はあなたの連結正規表現を試してみましたhacve、動作しているようです、ありがとうございました – ratherBeKiting

関連する問題