我想在Perl字符串中检测某些字符的存在,例如@#$%\ /。任何人都可以为此建议正则表达式。我尝试了一些,但它没有用。
=~ /(\W@\W#\W%\W*)/)
=~ /(@|#|%|*)/)
我尝试了这些,但它没有用。
有人可以建议我哪里出错吗?
答案 0 :(得分:2)
你在第二次尝试时走在正确的轨道上,但你忘了逃避在正则表达式模式中具有特殊含义的字符。
/\@|#|\$|%|\\|\// # or m{\@|#|\$|%|\\|/}
但是,使用字符类会更有效。
/[\@#\$%\\//]/ # or m{[\@#\$%\\/]}
如果您确定要检查任何非单词字符,可以使用
/\W/
更安全的方法通常是指定要允许的字符,并排除其他所有字符。例如,
/[^\w]/ # Only allow word characters.
或
/[^a-zA-Z0-9_]/ # Only allow unaccented latin letters, "european" digits, and underscore.
答案 1 :(得分:1)
这应该有效:
=~ /[@#$%\/]/
如果其中一个字符包含在字符串中,则会检测到
my $s = "@";
if ($s =~ /[@#\$\%\/]/) {
print "have it";
}
答案 2 :(得分:0)
You can use quotemeta
. For example:
my $chars = '@#$%\/';
my ($regex) = map { qr /$_/ } join '|', map {quotemeta} split //, $chars;