Perl - 删除除少数之外的所有特殊字符

时间:2014-11-14 04:19:39

标签: regex perl

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

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

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

2 个答案:

答案 0 :(得分:2)

更改您的代码,如下所示删除除连字符

以外的所有标点符号
$string =~ s/(?!-)[[:punct:]]//g;

DEMO

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

输出:

foo-bar----

答案 1 :(得分:1)

您也可以使用unicode属性:

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