替换分隔字符串中的整个整数匹配项及其最多一个相邻逗号

问题描述 投票:0回答:6

我有这个字符串:

525,294,475,215,365,745

我需要删除

475
...及其前面的逗号。

如果我需要删除第一个数字(并且字符串中有多个数字),我需要删除下面的逗号。

我该怎么做?正则表达式?

php csv replace
6个回答
2
投票
$newStr = str_replace(',475', '525,294,475,215,365,745');

或者更不容易出错的方法:

$new = array();
$pieces = explode(',', '525,294,475,215,365,745');
foreach ($pieces as $piece) {
   if ($piece != 475) {
      $new[] = $piece;
   }
}

$newStr = implode(',', $new);

1
投票

这是一个正则表达式:

$s = "525,294,475,215,365,745";
$s = preg_replace(',?475', '', $s);

0
投票
$data = "525,294,475,215,365,745";

$parts = explode(',', $data);

for ($i = 0; $i < count($parts); $i++) {
    if ($parts[$i] == 475) {
        unset($parts[$i]);
    }
}

$newdata = join(',', $parts);

0
投票
<?php
$bigString = "525,294,475,215,365,745";
$pos = strpos($bigString, ",");
while($pos != false) {
  $newString .= substr($bigString, 0, $pos);
  $bigString = substr($bigString, $pos + 1);
  $pos = strpos($bigString, ",");
}
echo $newString;
?>

0
投票
function filterValue($index, &$a) 
{
    $key = array_search($index, $a);
    if ($key != false) {
        unset($a[$key]);
    }
}


// Original data
$data = "525,294,475,215,365,745";
$data = explode(',', $data);

filterValue('475', $data);
$output = implode(',', $data);

0
投票

使用带有单词边界的正则表达式和条件匹配表达式将提供一种删除整个整数匹配项和仅删除其邻居逗号(不是两者)的方法,而不会爆炸和重新内爆。

代码:(演示

echo preg_replace('#(,)?\b' . preg_quote($find) . '\b(?(1)|,?)#', '', $string);
  • 如果整个数字匹配之前有逗号,则该逗号将被匹配并删除。
  • 如果整个字符串匹配之前没有逗号,则可选的逗号将被匹配并删除。

但是,这种操作表明您可能正在使用次优数据类型来管理似乎更适合保存在数组中的内容。

© www.soinside.com 2019 - 2024. All rights reserved.