2017-10-12 134 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

您可以嘗試鞏固萬事成以下單正則表達式:

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在PHP中的演示顯示,代碼作品。順便說一句,如果你一般需要正則表達式匹配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