2013-04-08 88 views
1

我的表列中有逗號分隔的值,我必須將新值與舊值分開。如何找到與正則表達式不匹配的項目

我的代碼是

$a = '1,2,3,4'; 
    $b = '1,2'; 

    if(preg_match("/[^$b]/",$a,$matches)){ 
     print_r($matches); 
    }; 

我想找到3,4,但我不能這樣做。

+0

你真的想正則表達式? – sectus 2013-04-08 07:40:27

+0

背後的邏輯是什麼? – DonCallisto 2013-04-08 07:40:43

+0

請說清楚這個代碼你想要什麼? – 2013-04-08 07:43:31

回答

4

你真的不應該使用正則表達式。 PHP具有良好的函數來計算交點:

$a = explode(',', '1,2,3,4'); 
$b = explode(',', '1,2'); 

print_r(array_values(array_diff($a, $b))); 

參見:array_diff()

注意,這也將在下面的示例工作:

$a = '1,2,3,4'; 
$b = '1,3'; 

// outcome must be: 2, 4 
+1

不知道爲什麼這是倒票,但很好的答案。 – Jon 2013-04-08 07:51:52

+2

@Jon也許是一個反反正規大使:) – 2013-04-08 07:53:18

+0

不幸的是,其中有不少人是這樣的< – Jon 2013-04-08 07:54:03

-2

使用preg_match_all代替preg_match

$a = '1,2,3,4,10'; 
$b = '1,2'; 
if(preg_match_all("/[^$b](.*)/",$a,$matches)){ 
    print_r($matches); 
}; 

輸出

Array 
(
    [0] => Array 
    (
     [0] => 3,4,10 
    ) 

    [1] => Array 
    (
     [0] => ,4,10 
    ) 

) 
+0

如果'$ a =='1,2,3,4,10''不起作用。 – 2013-04-08 07:46:43

+0

@Farhad一旦你的值超過9,這將會中斷。 – 2013-04-08 07:52:07

+0

@Farhad我解決了這個問題 – 2013-04-08 07:55:14