Regex 如何检测perl字符串中的某些特殊字符?
我想检测Perl字符串中是否存在某些字符,如@$%\/。有人能推荐一个正则表达式吗。我试了几次,但都没用Regex 如何检测perl字符串中的某些特殊字符?,regex,perl,character,Regex,Perl,Character,我想检测Perl字符串中是否存在某些字符,如@$%\/。有人能推荐一个正则表达式吗。我试了几次,但都没用 =~ /(\W@\W#\W%\W*)/) =~ /(@|#|%|*)/) 我试过这些,但不起作用 有人能告诉我哪里出了问题吗?这应该可以: =~ /[@#$%\/]/ 如果字符串中包含一个字符,则会检测到该字符 my $s = "@"; if ($s =~ /[@#\$\%\/]/) { print "have it"; } 您的第二次尝试是正确的,但是您忘记了转义在
=~ /(\W@\W#\W%\W*)/)
=~ /(@|#|%|*)/)
我试过这些,但不起作用
有人能告诉我哪里出了问题吗?这应该可以:
=~ /[@#$%\/]/
如果字符串中包含一个字符,则会检测到该字符
my $s = "@";
if ($s =~ /[@#\$\%\/]/) {
print "have it";
}
您的第二次尝试是正确的,但是您忘记了转义在正则表达式模式中具有特殊意义的字符
/\@|#|\$|%|\\|\// # or m{\@|#|\$|%|\\|/}
但是,使用字符类会更有效
/[\@#\$%\\//]/ # or m{[\@#\$%\\/]}
如果您可以检查任何非单词字符,可以使用
/\W/
更安全的方法通常是指定要允许的字符,并排除所有其他字符。比如说,
/[^\w]/ # Only allow word characters.
或
你可以用。例如:
my $chars = '@#$%\/';
my ($regex) = map { qr /$_/ } join '|', map {quotemeta} split //, $chars;
=~m/\W/g;够了。我对您认为的\W会做什么感到困惑?它只检测到第一个字符。Try with it将不起作用$%被视为插值为“0”的变量,反斜杠将转义为正斜杠。试试/[\@\$%\\\/]/试试这个。它在我这一方不起作用,我的$s=lj2dm%;如果$s=~/[@$%\/]/{print have\n;}@dev_k2.0,则必须转义%符号。请看我编辑的答案否,%s不需要转义,尽管转义除了可读性之外没有什么坏处。我不是选民。
my $chars = '@#$%\/';
my ($regex) = map { qr /$_/ } join '|', map {quotemeta} split //, $chars;