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: serait-ce bien? P> jeu janvier 1 05:30:00 1970 code>
if ($l =~ /[a-zA-Z]/)
{
print "string ";
}
else
{
print "number ";
}
6 Réponses :
Essayez ceci:
$ perl perl.pl 99932 all numbers abcXXX all letters 9abd99_32 a mix of numbers/letters/others
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] / code> <- la seconde z est probablement destiné à être en hausse (
/ [a-za-z] / code>), ou le premier
az code> doit être omis (voir mon exemple)
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"; } }
Si vous recherchez une lettre de n'importe quelle langue de n'importe quelle langue, vous devriez aller avec jeter un coup d'oeil sur cette référence complète: propriétés de caractère Unicode p> p>
Utiliser Le troisième emploie un double négatif: non pas-lettre, pas un chiffre, et non un soulignement. P>
Quel que soit votre choix, ceux qui maintiennent votre code apprécieront certainement si vous vous en tenez avec une systématiquement! p> / [A-ZA-Z] / CODE> est une manière centrée sur les États-Unis pour le faire. Pour accepter une lettre, utilisez l'une des p>
/ [[: alpha:]] / code> li>
/ \ p {l} / code> li>
/ [^ \ w \ d _] / code> li>
ul>
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 : P>
look_like_number p>
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. p> blockQuote>
[^\W0-9_] # or [[:alpha:]] See perldoc perlre
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