如何检测perl字符串中的某些特殊字符?

时间:2017-04-24 10:01:14

标签: regex perl character

我想在Perl字符串中检测某些字符的存在,例如@#$%\ /。任何人都可以为此建议正则表达式。我尝试了一些,但它没有用。

=~ /(\W@\W#\W%\W*)/)
=~ /(@|#|%|*)/) 

我尝试了这些,但它没有用。

有人可以建议我哪里出错吗?

3 个答案:

答案 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;