如何从字符串中删除和 ID

Ped*_*ro 7 regex string perl

我有一个看起来像这样的字符串,它们是表中的 ID:

1,2,3,4,5,6,7,8,9
Run Code Online (Sandbox Code Playgroud)

如果有人从数据库中删除了某些内容,我将需要更新字符串。我知道这样做会删除值,但不会删除逗号。知道如何检查 id 前后是否有逗号,这样我的字符串就不会中断吗?

$new_values = $original_values[0];
$new_values =~ s/$car_id//;
Run Code Online (Sandbox Code Playgroud)

结果:1,2,,4,5,6,7,8,9使用上述样本(差)。应该是1,2,4,5,6,7,8,9

Tim*_*and 6

要从$car_id字符串中删除:

my $car_id = 3;
my $new_values = q{1,2,3,4,5,6,7,8,9}; 
$new_values = join q{,}, grep { $_ != $car_id } 
    split /,/, $new_values; 
say $new_values;
# Prints:
# 1,2,4,5,6,7,8,9
Run Code Online (Sandbox Code Playgroud)

如果您已经删除了 id(s),并且您需要删除多余的逗号,请重新格式化字符串,如下所示:

my $new_values = q{,,1,2,,4,5,6,7,8,9,,,}; 
$new_values = join q{,}, grep { /\d/ } split /,/, $new_values; 
say $new_values;
# Prints:
# 1,2,4,5,6,7,8,9
Run Code Online (Sandbox Code Playgroud)


ike*_*ami 5

s/^\Q$car_id\E,|,\Q$car_id\E\b//
Run Code Online (Sandbox Code Playgroud)

另一种方法是存储一个额外的前导和尾随逗号 ( ,1,2,3,4,5,6,7,8,9,)

主要好处是它可以更轻松地使用 SQL 搜索 id(因为您可以搜索,$car_id,)。编辑它也是如此。

在 Perl 方面,你会使用

s/,\K\Q$car_id\E,//    # To remove
Run Code Online (Sandbox Code Playgroud)
substr($_, 1, -1)      # To get actual string
Run Code Online (Sandbox Code Playgroud)


Wik*_*żew 5

您可以使用

s/^$car_id,|,$car_id\b//
Run Code Online (Sandbox Code Playgroud)

细节

  • ^ - 字符串的开始
  • $car_id - 变量值
  • , - 逗号
  • | - 或者
  • , - 逗号
  • $car_id - 变量值
  • \b - 字边界。