2013-08-01 63 views
4

我想過濾通過我的系統傳遞的所有字符串,以便我只發出有效的字符。過濾掉不在一個集合中的字符

以下是允許的。

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

現在我可以想出一個正則表達式來搜索這個集合中的字符。但是我需要的是一個正則表達式,它可以與這個集合中的字符相匹配,所以我可以不用任何東西來替換它們。

任何想法?

回答

7

以下是您可以做到的一種方法。您標記的Perl,所以我會給你一個Perl化的解決方案:

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標誌用於替換多個字符。