我有一个看起来像这样的字符串,它们是表中的 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。
要从$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)
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)
您可以使用
s/^$car_id,|,$car_id\b//
Run Code Online (Sandbox Code Playgroud)
细节
^ - 字符串的开始$car_id - 变量值, - 逗号| - 或者, - 逗号$car_id - 变量值\b - 字边界。