【问题标题】:Perl - Removing all special characters except a fewPerl - 删除除少数之外的所有特殊字符
【发布时间】:2014-11-14 18:56:15
【问题描述】:

所以我遇到了一个 Perl 正则表达式“术语”,它允许您删除所有标点符号。代码如下:

$string =~ s/[[:punct:]]//g;.

但是,这会继续删除所有特殊字符。有没有办法可以修改特定的正则表达式,例如,它会删除除连字符以外的所有特殊字符。正如我在上一个关于 Perl 的问题中所说,我是该语言的新手,因此显而易见的事情对我来说并不明显。感谢所有帮助:_

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    如下更改您的代码以删除除连字符以外的所有标点符号,

    $string =~ s/(?!-)[[:punct:]]//g;
    

    DEMO

    use strict;
    use warnings;
    my $string = "foo;\"-bar'.,...*(){}[]----";
    $string =~ s/(?!-)[[:punct:]]//g;
    print "$string\n";
    

    输出:

    foo-bar----
    

    【讨论】:

    • 模式周围不需要原子组。 (?!-)[[:punct:]] 就够了。
    • @AvinashRaj - 我会将其作为另一个问题提出并将其标记为已解决。谢谢:)
    • @AvinashRaj:我不知道你回答了什么问题,但这显然不是 OP 的问题
    • op 想要删除除连字符之外的所有标点符号。这就是我的理解。我还请他编辑或提出一个新问题。他选择了第二个选项。
    • @Avinash Raj 回答了我的问题。我的另一个问题与我在 OP 中发布的不同:)
    【解决方案2】:

    你也可以使用 unicode 属性:

    $string =~ s/[^-\PP]+//g;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多