过滤掉不在集合中的字符

时间:2013-08-01 05:34:21

标签: regex perl regex-negation

我正在尝试过滤我通过系统传递的所有字符串,因此我只发送有效的字符。

允许以下内容。

a-z
A-Z
"-" (hypen, 0x24)
" " (space, 0x20)
"’" (single quote, 0x27)
"~" (tilde, 0x7E)

现在我可以想出一个在这个集合中搜索字符的正则表达式。但我需要的是一个正则表达式匹配这个集合中的字符,所以我可以用任何东西替换它们。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

这是一种可以做到的方法。你标记了Perl,所以我会给你一个perlish解决方案:

my $string = q{That is a ~ v%^&*()ery co$ol ' but not 4 realistic T3st};
print $string . "\n";
$string =~ s{[^-a-zA-Z '~]}{}g;
print $string . "\n";

打印:

That is a ~ v%^&*()ery co$ol ' but not 4 realistic T3st
That is a ~ very cool ' but not  realistic Tst

说清楚:

$string =~ s{[^-a-zA-Z '~]}{}g;

匹配[^..][括号内不是]的字符,并将其替换为空。替换结束时的g标志用于替换多于1个字符。

答案 1 :(得分:1)

用于匹配您提到的字符串的正则表达式是:

[a-zA-Z\\-~]|\x27

有关详细信息,请参阅http://www.regular-expressions.info/quickstart.html