我有以下代码:
my $str = 'Uploaded 07-02▒05:14, Size 212.14▒MiB, ULed by someone';
print "Pre:".$str."\n";
my $str =~ s/^[a-zA-z0-9,]//g;
print "Post:".$str."\n";
我的目标是删除那些特殊字符和空格,以便我可以拆分字符串以便进一步处理。
使用上面的正则表达式,我试图删除除字母数字字符和逗号之外的所有字符。不幸的是,我得到一个空白。我是正则表达式的初学者,想知道我的表达方式有什么问题。
答案 0 :(得分:11)
你有三个错误密谋破坏你的程序。如果您的代码顶部有use strict
和use warnings
,那么Perl会打印消息以提醒您
您已宣布第二个$str
,因此undef
并打印为空字符串
你在角色类之外有一个插入符号,所以它充当了一个字符串的开头而不是否定了这个类
您有[a-zA-z0-9]
作为角色类。 A-z
包括字符[
,\
,]
,^
,_
和`
以及字符{}。小写字母。您需要[a-zA-Z0-9]
而不是
这是一些有效的代码。您的文本字符串包含Unicode字符 U + 2592 Medium Shade ,因此我必须use utf8
将代码标记为以UTF-8编码,并use open
设置STDOUT以接受UTF-8编码
use utf8;
use strict;
use warnings;
use open qw/ :std :encoding(utf-8) /;
my $str = 'Uploaded 07-02▒05:14, Size 212.14▒MiB, ULed by someone';
print "Pre: $str\n";
$str =~ s/[^a-zA-Z0-9,]//g;
print "Post: $str\n";
Pre: Uploaded 07-02▒05:14, Size 212.14▒MiB, ULed by someone
Post: Uploaded07020514,Size21214MiB,ULedbysomeone
答案 1 :(得分:3)
替代:
$str =~ s/[^\p{PosixAlnum},]//g;
e.g。删除任何不是posix字母数字或逗号的内容。
答案 2 :(得分:2)
我试图删除除字母数字字符和逗号之外的所有字符。
您需要使用:
$str =~ s/[^a-zA-Z0-9,]+//g;
注意^
作为[...]
内的第一个字符,它否定了由[...]
表示的字符类中的每个字符
[^a-zA-Z0-9,]+
将匹配1个或多个非字母,数字或逗号的内容。
答案 3 :(得分:0)
尝试此操作以从字符串
中删除特殊字符$str =~ s/[^[:print:]]//g;
OR
$str =~ s/[^[print:]]//g;