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

fix*_*xer 5 regex perl

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

这样可以吗?

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

gho*_*g74 14

试试这个:

/[a-zA-Z]/
Run Code Online (Sandbox Code Playgroud)

要么

/[[:alpha:]]/
Run Code Online (Sandbox Code Playgroud)

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

也看了 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";
Run Code Online (Sandbox Code Playgroud)

产量

$ perl perl.pl
99932 all numbers
abcXXX all letters
9abd99_32 a mix of numbers/letters/others
Run Code Online (Sandbox Code Playgroud)

  • [a-zA-Z]对字母采取特别的美国观点.这是一个更大的世界.POSIX字符类会更好,但匹配Unicode Letter属性是相同的,更容易键入.:) (5认同)

Mak*_*kis 9

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

#!/usr/bin/perl

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


Rub*_*ias 5

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

\p{L}
Run Code Online (Sandbox Code Playgroud)

看看这个完整的参考:Unicode字符属性