过滤掉不在集合中的字符

Dan*_*ley 4 regex perl regex-negation

我试图过滤我通过我的系统的所有字符串,以便我只发出有效的字符.

允许以下内容.

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

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

有任何想法吗?

小智 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";
Run Code Online (Sandbox Code Playgroud)

打印:

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

说清楚:

$string =~ s{[^-a-zA-Z '~]}{}g;
Run Code Online (Sandbox Code Playgroud)

匹配不在括号[^..]内的字符[,]并替换它们.所述g在所述取代的结束标志是用于更换多于1个字符.