PHP preg_match与用逗号分隔的列表不匹配

时间:2016-06-09 12:07:02

标签: php regex

这是我的用户列表

james,john,mark,luke,

james,john,mark,luke,mary,david

我想删除重复的部分并保留剩下的部分。

所以这是我的代码

$old   = 'james,john,mark,luke,';
$users = 'james,john,mark,luke,mary,david';

// Replace , with |
$expr = rtrim(preg_replace('/\,/', '|', $old), '|');

$newstr = preg_replace("/$expr/i", '', $users);

echo $newstr;

输出

  

,,,,玛丽,大卫

我想要

  

玛丽,大卫,

2 个答案:

答案 0 :(得分:2)

使用trim基于您的代码的解决方案:

$old = 'james,john,mark,luke,';
$users = 'james,john,mark,luke,mary,david';

$expr = rtrim(preg_replace('/\,/', '|', $old), '|');
$newstr = preg_replace("/$expr/i", '', $users);
echo trim($newstr, ',');

演示: https://3v4l.org/W3XKe

使用explodearray_diffimplode的更好解决方案:

$old = 'james,john,mark,luke,';
$users = 'james,john,mark,luke,mary,david';

$old_items = explode(',', $old);
$users_items = explode(',', $users);

echo implode(array_diff($users_items, $old_items), ',');

演示: https://3v4l.org/tnt9F

答案 1 :(得分:0)

目前无法对其进行测试,但它不会像那样工作吗?

$old   = 'james,john,mark,luke,';
$users = 'james,john,mark,luke,mary,david';
echo preg_replace("/$old/", "", $users); //should print "mary,david"