0

我有一个字符串存储在一个变量中,这个字符串可能以下列方式出现:

$sec_ugs_exp = ''; //Empty one
$sec_ugs_exp = '190'; //Containing the number I want to delete (190)
$sec_ugs_exp = '16'; //Containing only a number, not the one Im looking for
$sec_ugs_exp = '12,159,190'; // Containing my number at the end (or in beginning too)
$sec_ugs_exp = '15,190,145,86'; // Containing my number somewhere in the middle

我需要删除 190 号码(如果存在)并删除它后面的逗号,除非我的号码在末尾或它是单独的(在这种情况下没有逗号)

所以在我之前写的例子中,我需要得到这样的回报:

$sec_ugs_exp = '';
$sec_ugs_exp = '';
$sec_ugs_exp = '16';
$sec_ugs_exp = '12,159';
$sec_ugs_exp = '15,145,86';

希望我解释了自己,对不起我的英语。我尝试使用 preg_replace 和其他一些方法,但我总是无法检测到逗号。

4

6 回答 6

3

我最后一次尝试不使用正则表达式:

$codes = array_flip(explode(",", $sec_ugs_exp));
unset($codes[190]);
$sec_ugs_exp = implode(',', array_keys($codes));
于 2012-09-10T18:18:53.647 回答
2

一个简单的正则表达式应该可以解决问题/(190,?)/

$newString = preg_replace('/(190,?)/', '', $string);

演示:http ://codepad.viper-7.com/TIW9D6

或者,如果您想阻止以下匹配

$sec_ugs_exp = '15,1901,86';
                   ^^^

可以使用

(190(,|$))
于 2012-09-10T18:19:38.410 回答
1

又快又脏,但应该适合你:

str_replace(array(",190","190,","190"), "", $sec_ugs_exp);

注意数组中的顺序很重要。

于 2012-09-10T18:19:49.937 回答
1

这里没有一个答案说明以 开头或结尾的数字190

$newString = trim(str_replace(',,', ',', preg_replace('/\b190\b/', '', $string)), ',');
于 2012-09-10T18:23:40.917 回答
1
$array = explode ( ',' , $sec_ugs_exp );

foreach ( $array AS $key => $number )
{
  if ( $number == 190 )
  {
    unset($array[$key]);
  }
}

$sec_ugs_exp = implode ( ',' , $array );

如果数字为 1903 或 9190,这将起作用

于 2012-09-10T18:23:51.773 回答
0

尝试

str_replace('190,', '', $sec_ugs_exp);
str_replace('190', '', $sec_ugs_exp);

或者

str_replace('190', '', $sec_ugs_exp);
str_replace(',,' ',', $sec_ugs_exp);

如果您的字符串中没有多余的空格

于 2012-09-10T18:21:03.430 回答