如何检查Perl字符串是否包含字母?

时间:2010-01-08 08:22:01

标签: regex perl

在Perl中,我应该使用什么正则表达式来查找字符串是否包含字母? 使用的字符串示例:Thu Jan 1 05:30:00 1970

这样可以吗?

    if ($l =~ /[a-zA-Z]/)
 {
    print "string ";    
 }
 else
 {      
    print "number ";    
 }

5 个答案:

答案 0 :(得分:14)

试试这个:

/[a-zA-Z]/

/[[:alpha:]]/

否则,您应该提供您想要匹配的字符串的示例。

还阅读perldoc perlrequick

编辑:@OP,你提供了示例字符串,但我不确定你想用它做什么。所以我假设你要检查一个单词是否都是字母,所有数字或其他东西。这是开始的事情。全部来自perldoc perlrequick(和perlretut)所以请阅读它们。

sub check{
    my $str = shift;
    if ($str =~ /^[a-zA-Z]+$/){
        return $str." all letters";
    }
    if ($str =~ /^[0-9]+$/){
        return $str." all numbers";
    }else{
        return $str." a mix of numbers/letters/others";
    }
}

$string = "99932";
print check ($string)."\n";
$string = "abcXXX";
print check ($string)."\n";
$string = "9abd99_32";
print check ($string)."\n";

输出

$ perl perl.pl
99932 all numbers
abcXXX all letters
9abd99_32 a mix of numbers/letters/others

答案 1 :(得分:9)

如果要匹配Unicode字符而不仅仅是ASCII字符,请尝试以下操作:

#!/usr/bin/perl

while (<>) {
  if (/[\p{L}]+/) {
    print "letters\n";
  } else {
    print "no letters\n";
  }
}

答案 2 :(得分:5)

如果您正在寻找任何语言的任何类型的信件,您应该使用

\p{L}

查看完整参考资料:Unicode Character Properties

答案 3 :(得分:0)

使用/[A-Za-z]/是以美国为中心的方式。要接受任何信件,请使用

之一
  • /[[:alpha:]]/
  • /\p{L}/
  • /[^\W\d_]/

第三个采用双重否定:不是非字母,不是数字,而不是下划线。

无论您选择哪种方式,如果您始终坚持使用一个代码,那么维护代码的人肯定会感激不尽!

答案 4 :(得分:0)

如果你想在Perl中检测某些东西看起来像是一个数字,你需要Scalar::Util :: looks_like_number(自perl 5.7.3以来的核心)。来自perlapi

  

looks_like_number

     

测试SV的内容是否看起来   喜欢数字(或数字)。天道酬勤   和无限被视为数字   (因此不会发出非数字   警告),即使你的atof()没有   grok他们。