7
votes

Comment puis-je vérifier si une chaîne PERL contient des lettres?

dans Perl, quelle regex dois-je utiliser pour trouver si une chaîne de caractères a des lettres ou non? Exemple d'une chaîne utilisée: jeu janvier 1 05:30:00 1970 code>

serait-ce bien? P>

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


5 commentaires

Qu'est-ce que "alphabet (s)"? Je suggère de donner un exemple de la chaîne que vous souhaitez correspondre.


Aaron: C'est une erreur courante pour les "lettres". Principalement de personnes avec des antécédents indiens.


Qu'est-ce que vous voulez faire avec la chaîne Jan 1 05:30:00 1970? Je ne comprends pas vraiment.


Je veux vérifier s'il y a des lettres dedans ou non.


Si vous essayez d'analyser les dates, vous devez envisager un module d'analyse de date. DateTime.perl.org/?Modules


6 Réponses :


15
votes

Essayez ceci:

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


2 commentaires

Le [A-ZA-Z] prend une vue particulièrement américaine aux lettres. C'est un monde plus gros là-bas. La classe de caractères POSIX serait meilleure, mais correspondant à la propriété de la lettre Unicode est la même chose et plus facile à taper. :)


/ [a-za-z] / <- la seconde z est probablement destiné à être en hausse ( / [a-za-z] / ), ou le premier az doit être omis (voir mon exemple)



9
votes

Si vous souhaitez correspondre à des caractères Unicode plutôt que de simplement ASCII, essayez ceci:

#!/usr/bin/perl

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


0 commentaires

5
votes

Si vous recherchez une lettre de n'importe quelle langue de n'importe quelle langue, vous devriez aller avec xxx

jeter un coup d'oeil sur cette référence complète: propriétés de caractère Unicode


0 commentaires

0
votes

Utiliser / [A-ZA-Z] / est une manière centrée sur les États-Unis pour le faire. Pour accepter une lettre, utilisez l'une des

  • / [[: alpha:]] /
  • / \ p {l} /
  • / [^ \ w \ d _] /

    Le troisième emploie un double négatif: non pas-lettre, pas un chiffre, et non un soulignement.

    Quel que soit votre choix, ceux qui maintiennent votre code apprécieront certainement si vous vous en tenez avec une systématiquement!


0 commentaires

0
votes

Si vous souhaitez détecter si quelque chose ressemble à un nombre à des fins de la manipulation à Perl, vous voudrez scalaire :: util :: look_like_number (noyau depuis Perl 5.7.3). De Perlapi :

look_like_number

Test si le contenu d'un SV ressemble comme un nombre (ou est un nombre). Inf et l'infini sont traités comme des nombres (alors ne délivrera pas de non-numérique AVERTISSEMENT), même si votre ATOF () ne fonctionne pas les grok.


0 commentaires

0
votes
[^\W0-9_]

# or

[[:alpha:]]
See perldoc perlre

0 commentaires