印刷或印刷前如何消毒?
我想删除所有的终端控制序列和其他潜在的风险序列。
发布于 2014-08-25 19:04:34
也许您可以指定要保留的字符,而不是专注于要删除的内容。以下是删除任何非单词字符、间距或标点符号的正则表达式:
s/[^\w\s[:punct:]]+//g;下面演示了几行示例。它使用Data::Dump方便地显示字符串的内部:
use strict;
use warnings;
use Data::Dump qw(dump);
my @data = (
"Hello World\t\r\n\e\x00\x01\x02\x03\x04\x0b",
'Testing Punctuation - `~!@#$%^&*()_+-={}|[]\:";\'<>?,./'
);
for (@data) {
print " Orig: " . dump($_) . "\n";
s/[^\w\s[:punct:]]+//g;
print "Cleaned: " . dump($_) . "\n\n";
}产出:
Orig: "Hello World\t\r\n\e\0\1\2\3\4\13"
Cleaned: "Hello World\t\r\n"
Orig: "Testing Punctuation - `~!\@#\$%^&*()_+-={}|[]\\:\";'<>?,./"
Cleaned: "Testing Punctuation - `~!\@#\$%^&*()_+-={}|[]\\:\";'<>?,./"发布于 2014-08-25 12:33:33
翻译可以是:
$str =~ tr/\x00-\x08\x0B-\x1F\x7F//;这是ASCII控制字符,不包括选项卡和行提要。
发布于 2014-08-25 16:02:44
根据您的需要,这种方法可能有效:它删除了所有非字母、数字或空白的内容:
my $junk = "\t\r\n\e hello\x00\x01\x02\x03\x04\x0b";
print length($junk), "\n"; # 17
$junk =~ s/[^\w\s]//g;
print length($junk), "\n\n"; # 10
my $junk2 = "\x00\x01\x02\x03\x04\x0b";
print length($junk2), "\n"; # 6
$junk2 =~ s/[^\w\s]//g;
print length($junk2), "\n"; # 0https://stackoverflow.com/questions/25485073
复制相似问题