Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过正则表达式查找不匹配项_Php_Regex - Fatal编程技术网

Php 如何通过正则表达式查找不匹配项

Php 如何通过正则表达式查找不匹配项,php,regex,Php,Regex,我的表列中有逗号分隔的值,我必须将新值与旧值分隔开 我的代码是 $a = '1,2,3,4'; $b = '1,2'; if(preg_match("/[^$b]/",$a,$matches)){ print_r($matches); }; 我想找到3,4,但我做不到 使用preg\u match\u all而不是preg\u match $a = '1,2,3,4,10'; $b = '1,2'; if(preg_match_all("/[^

我的表列中有逗号分隔的值,我必须将新值与旧值分隔开

我的代码是

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

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

我想找到
3,4
,但我做不到

使用
preg\u match\u all
而不是
preg\u 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
    )

 )

你真的不应该用正则表达式。PHP具有计算交点的良好功能:

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

print_r(array_values(array_diff($a, $b)));
另见:

请注意,这也适用于以下示例:

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

// outcome must be: 2, 4

你真的想要正则表达式吗?背后的逻辑是什么?请明确你想要这段代码做什么?我有一个数据库字段,我必须将新值与旧值分开,并使用正则表达式向新值发送消息,因为它有缺陷,因为数字在字符串上下文中不能很好地工作。@Farhad一旦你的值超过9,它就会中断。现在,
$b=='1,3'
@mohammadmohsenipur将失败,但效率不高或不一致-仅适用于特定的测试用例。
$a='1,2,3,4'
$b='1,3'
的答案应该是
'2,4'
@Jon一位反雷格克斯的大使:)不幸的是,有相当多的人>@Farhad不仅“也有效”,这是处理布景的唯一正确方法。@Jack,你说得对。如果$a='1,2,3,4,5,6,7,8,9,10',它也将显示正确的答案,但mohsenipur的另一个答案将不会work@NiekvanderSteen谢谢你扭转你的投票:)想要正则表达式和需要正则表达式不是一回事,在这种情况下会有相当灾难性的结果;我喜欢正则表达式,但知道什么时候不使用是值得的