2010-01-08 5 views
5

В Perl, какое регулярное выражение следует использовать, чтобы найти строку символов или нет? Пример используемой струны: Thu Jan 1 05:30:00 1970Как проверить, содержит ли строка Perl буквы?

Будет ли это в порядке?

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

Что такое "алфавит (а)"? Я предлагаю привести пример строки, которую вы хотите сопоставить. –

+4

Аарон: Это распространенная ошибка для «букв». В основном из людей с индийским фоном. – Joey

+0

Что вы хотите сделать со строкой Thu Jan 1 05:30:00 1970? Я действительно не понимаю. – ghostdog74

ответ

14

попробовать это:

/[a-zA-Z]/ 

или

/[[:alpha:]]/ 

в противном случае, вы должны привести примеры строк, которые вы хотите, чтобы соответствовать.

также прочитать perldoc perlrequick

Edit: @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 
+5

[a-zA-Z] особенно обращает внимание американцев на письма. Это большой мир. Класс символов POSIX был бы лучше, но соответствие свойства Unicode Letter было бы одним и тем же и легче вводить. :) –

+0

'/ [a-zA-z] /' <- второй z, вероятно, должен быть верхний ('/ [a-zA-Z] /'), или первый 'az' должен быть опущен (см. мой пример) –

9

Если вы хотите, чтобы соответствовать символы Unicode, а не только ASCII те, попробуйте следующее:

#!/usr/bin/perl 

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

Если вы ищете какой-либо письма от любого язык, вы должны пойти с

\p{L} 

Взгляните на эту полную ссылку: Unicode Character Properties

0

Использование /[A-Za-z]/ является ориентированным на США способом. Для того, чтобы принять любое письмо, используйте один из

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

Третий использует двойной отрицательный: не не-а-буква, не цифра, а а не подчеркивание.

Какой бы вы ни выбрали, те, кто поддерживает ваш код, безусловно, оценят его, если вы будете придерживаться одного последовательно!

0

Если вы хотите определить, будет ли что-то похожее на число для манипулирования им в Perl, вам понадобится Scalar::Util :: look_like_number (ядро с perl 5.7.3). От perlapi:

looks_like_number

испытания, если содержание СВ выглядит как номер (или номер).Inf и Infinity обрабатываются как цифры (так что не выдавайте нечисловое предупреждение ), даже если ваш atof() не grok им.

Смежные вопросы