我的输入是:
这是一个简单的文本,仅用于测试目的ascii文本 12345678910 - = [];'#/。, - 使用新的regexxx! “£$%^& *() _ + {}〜@:<>?| Asdf -jkll
现在我正在使用JSON解码我的输入数据,这些数据解码(html类型的响应ex:& nbsp,\ x {a3},& gt等...),如下所示:
这是一个简单的文本仅供测试用途ascii text12345678910 - = []; \'#/。,\\ - 使用新的regexxx!\“\ u00A3 $%^& *()_ + {}〜 @:<>?|
Asdf \ u2013jkll
“
现在我将这个解码数据发送到我的程序,用空格/或一些可打印字符替换这个unicode(utf-8)和其他非ascii字符(我的意思是我只想打印ascii范围字符) 所以,我在perl中尝试了以下所有内容。
use strict;
use warnings;
use JSON;
use LWP::UserAgent;
use utf8;
#Due to some security reasons I am not mentioning the url,hope u understand
my $ResRef = sendHTTPRequest($someurlRequest);
my $string = $ResRef->decoded_content;#I used json decode to decode content
my $string = transalte_replace($string);
sub transalte_replace {
my $string = shift;
for($string) {
s/\\u[0-9]+/1-/g;
s/\\u[a-zA-Z0-9\+]*/2-/g;
s/\\x\{[a-zA-Z0-9]*\}/3-/g;
s/[^\p{ASCII}]/-/g;
s/[^\u0000-\u007F]+/replace1/g;
s/[^\x00-\x7F]+/rep/g;
s/[^\p{ASCII}]/-/g;
s/[^A-Za-z0-9\.,\?'""!@#\$%\^&\*\(\)-_=\+;:\<\>\/\\\|\}\{\[\]`\~]+/y/g;
#s/[£]//g;
s/[^\x20-\x7E]+/replace3/g;
#s/\\u[0-9]+/2-/g;
#s/\\x[a-z0-9]+/3-/g;
#s/[^\x00-\x7F]/4-/g;
}
}
输出仍然是:
“这是一个仅用于测试目的的简单文本ascii text12345678910 - = [];'#/。,\ - with new regexxx!\“\ x {a3} \ $%^&amp; *()_ + {}〜\ @:?| Asdf \ x {2013} jkll”;
我正在使用Windows环境,我只想要ascii范围的字符,数字和符号,而不是其他任何内容。请帮助
答案 0 :(得分:5)
s/[^\p{ASCII}]/-/g
相当于
s/[^\x00-\x7F]/-/g
所以它不可能保持AC
和A3
不变。
use strict;
use warnings;
use utf8; # Source code encoded using UTF-8.
use open ':std', ':encoding(UTF-8)'; # Terminal produces/expects UTF-8.
use feature qw( say );
my $string = q{¬`\\|!"£$%^&*()_+{}:@~<>?,./;'#[]=-0987654321:-+><};
say sprintf '%1$vX %1$s', $string;
$string =~ s/[^\p{ASCII}]/-/g;
say sprintf '%1$vX %1$s', $string;
输出:
$ perl a.pl
AC.60.5C.7C.21.22.A3.24.25.[...] ¬`\|!"£$%^&*()_+{}:@~<>?,./;'#[]=-0987654321:-+><
2D.60.5C.7C.21.22.2D.24.25.[...] -`\|!"-$%^&*()_+{}:@~<>?,./;'#[]=-0987654321:-+><
^^ ^^ ^ ^
您是否将s///
运算符应用于正确的变量?