代码之家  ›  专栏  ›  技术社区  ›  Pedro

如何从字符串中删除和标识

  •  2
  • Pedro  · 技术社区  · 4 年前

    我有一个字符串,看起来像,它们是表中的id。

    1,2,3,4,5,6,7,8,9
    

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

    $new_values = $oringa_value[0];
    $new_values =~ s/$car_id//;
    

    4 回复  |  直到 4 年前
        1
  •  3
  •   Wiktor Stribiżew    4 年前

    你可以用

    s/^$car_id,|,$car_id\b//
    

    细节

    • ^
    • $car_id
    • , -逗号
    • | -或者
    • -逗号
    • $车号 -可变值
    • \b
        2
  •  3
  •   ikegami Gilles Quénot    4 年前
    s/^\Q$car_id\E,|,\Q$car_id\E\b//
    

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

    主要的好处是使用SQL可以更容易地搜索id(因为您可以搜索 ,$car_id,

    在Perl方面,可以使用

    s/,\K\Q$car_id\E,//    # To remove
    
    substr($_, 1, -1)      # To get actual string
    
        3
  •  2
  •   Timur Shtatland    4 年前

    移除 $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
    

    如果你 已经

    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
    
        4
  •  1
  •   BerinHardt    4 年前

    丑陋的方法:使用regex删除值,然后简化

    $new_values = $oringa_value[0];
    $new_values =~ s/$car_id//;
    $new_values =~ s/,+/,/;
    

    $new_values = $oringa_value[0];
    my @values = split(/,/, $new_values);
    my $index = 0;
    $index++ until $values[$index] eq $car_id;
    splice(@values, $index, 1);
    $new_values = join(',', @values);