如果我有一个带ID的字符串
$myIDs = '22,34,445,67889,23';
我给了一个值,如何将其从字符串中删除,假设我确定它在字符串中?
$removeID = '445';
我是否使用preg_replace或是否有更好的方法?例如,如果它位于字符串的中间并且我只删除了一个值,那么我最终会得到两个逗号,然后我需要用一个逗号替换它们?
preg_replace($removeID, '', $myIDs);
更新:这些都是很棒的建议。但是,我只想到了一个潜在的问题。这可能需要作为数组而不是正则表达式处理。我的字符串是什么样的
$myIDs = '2312,23,234234';
和要移除的ID
$removeID = '23';
潜在的匹配太多......
答案 0 :(得分:3)
$array = explode(',',$myIDs);
$array = array_diff($array,array($removeID));
$output = implode(',',$array);
答案 1 :(得分:3)
您可以使用正则表达式:
$remove = preg_quote($removeID, '/');
$regex = '/,'.$remove.'$|^'.$remove.',|^'.$remove.'$|,'.$remove.'(?=,)/';
$myIDs = preg_replace($regex, '', $myIDs);
基本上说:替换$removeID
,它以字符串的开头或逗号为前缀,后缀为字符串的结尾或另一个逗号。
编辑:我已将正则表达式更改为经过测试的正则表达式(我已经测试了所有可能性,它似乎适用于我能想到的所有情况)...
答案 2 :(得分:2)
这是项目“89”的正则表达式:
/(^|,)89(?=,|$)/
它匹配“,89”(或者只是“89”,如果它在输入的开头),只要它直接跟随另一个“,”或输入的结尾。
适当的转义和一些抽象:
<?php
$myIDs = '23,45,678967,89,12';
$toRemove = 89;
$myIDs = preg_replace('/(^|,)' . preg_quote($toRemove) . '(?=,|$)/', '', $myIDs);
?>
使用多个输入进行测试。
希望有所帮助!
答案 3 :(得分:1)
$myIDs = '1,2,3,4,5';
$remID = '5';
$myIDs = preg_replace(array("/^$remID,|(?:,|^)$remID$/","/,$remID,/"),
array('',','),
$myIDs);
答案 4 :(得分:1)
$myarray=explode(',', $myIDs)
$excluded=preg_grep('^' . $removeID . '$', $myarray, PREG_GREP_INVERT)
$newId=join(',', $excluded)
答案 5 :(得分:1)
我也要提出一个解决方案:
preg_replace( '/\b(,' . $rID . '|' . $rID . ',|' . $rID . ')\b/', '', $myIDs );
即
preg_replace( '/\b(,445|445,|445)\b/', '', $myIDs );
(example)
答案 6 :(得分:-1)
最简单的方法是:
$myIDs = '22,34,445,67889,23';
$removeID = 445;
$myIDs = preg_replace("/($removeID,|,$removeID)/", '', $myIDs);
<强>更新强>:
$myIDs = preg_replace("/(^$removeID,|,$removeID$|,$removeID(?=,))/", '', $myIDs);