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

Regex 如何检查Perl字符串是否包含字母?,regex,perl,Regex,Perl,在Perl中,我应该使用什么正则表达式来查找字符串是否包含字母? 使用的字符串示例:Thu Jan 1 05:30:00 1970 这样可以吗 if ($l =~ /[a-zA-Z]/) { print "string "; } else { print "number "; } 试试这个: /[a-zA-Z]/ 或 否则,应该给出要匹配的字符串的示例 另请阅读perldoc perlrequick 编辑:@OP,您提供了示例字符

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

这样可以吗

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

/[a-zA-Z]/

否则,应该给出要匹配的字符串的示例

另请阅读
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

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

#!/usr/bin/perl

while (<>) {
  if (/[\p{L}]+/) {
    print "letters\n";
  } else {
    print "no letters\n";
  }
}
#/usr/bin/perl
而(){
如果(/[\p{L}]+/){
打印“字母”\n;
}否则{
打印“无字母\n”;
}
}

如果你要寻找任何语言的信件,你应该选择

\p{L}

看看这个完整的参考资料:

使用
/[a-Za-z]/
是一种以美国为中心的方法。要接受任何信函,请使用以下其中一种:

  • /[:alpha:][]/
  • /\p{L}/
  • /[^\W\d][/
第三种方法使用双重否定:不是字母,不是数字,也不是下划线


无论您选择哪一种,如果您始终坚持使用代码,维护您的代码的人肯定会感激您

如果为了在Perl中操作某个东西而想检测它是否像一个数字,那么您需要::looks_like_number(自Perl 5.7.3以来的核心)。发件人:

看起来像你的号码

测试SV的内容是否看起来像 像一个数字(或是一个数字)。Inf 无穷大被视为数字 (因此不会发出非数字的 警告),即使您的atof()没有 摸摸他们


参见perldoc

什么是“字母表”?我建议举一个你想匹配的字符串的例子。艾伦:这是“字母”的常见错误。大部分来自印度背景的人。1970年1月1日星期四05:30:00,你想用绳子做什么?我真的不明白。我想检查它是否有字母。如果你想解析日期,你应该考虑一个日期解析模块。[a-zA-Z]对信件采取了特别的美国观点。外面的世界更大。POSIX字符类会更好,但匹配Unicode字母属性也是一样,而且更容易键入。:)<代码>/[a-zA-z]/
\p{L}
[^\W0-9_]

# or

[[:alpha:]]