Sans boucler sur toute la gamme de caractères Unicode, comment puis-je obtenir une liste de caractères ayant une propriété donnée? En particulier, je veux une liste de tous les caractères qui sont des chiffres (c'est-à-dire ceux qui correspondent à / \ d / code>). J'ai regardé
Unicode :: ucd code>
, et il est utile pour déterminer les propriétés d'un caractère donné, mais il ne semble pas y avoir un moyen d'obtenir des caractères de liste qui possèdent une propriété. P>
4 Réponses :
Quels caractères / \ d / match dépend entièrement de votre implémentation de RegexP (bien que la norme 0-9 soit garantie). Dans le cas de Perl the Perl locale utilisé définit quels caractères sont considérés comme alphabétiques et chiffres. p>
Perl transforme les chaînes dans UTF8 avant de les exécuter à travers le moteur Regex. La seule chose que Perl locale affecte la manière dont une chaîne de byèse crue est transformée en UTF8. Une fois qu'une chaîne est dans UTF8, Perl utilisera toujours la même définition d'ISDigit, indépendante de la locale.
La liste des caractères Unicode pour chaque classe est générée à partir de la spécification Unicode lorsque vous compilez Perl et est généralement stocké dans / usr / lib / perl-votreperlversion / Unicore / lib / gc_sc / p>
Par exemple, la liste des plages de caractères Unicode qui correspondent à Isdigit (A.k.a. \ d) est stockée dans le fichier /usr/lib/perl-yourperlversion/unicore/lib/gc_sc/digit.pl p>
Merci, c'est presque exactement ce que je cherchais. J'aurai encore une boucle sur eux pour construire une liste, mais au moins cela ne prendra pas pour toujours et une journée.
Il n'y a aucun moyen de le faire sans itération à travers tous les personnages. (Si vous créez une énorme chaîne avec chacune d'elles et utilisez un REGEXP, vous devez toujours faire la boucle au moins une fois, pour créer la chaîne). P>
Une partie heureuse du processus de construction de Perl crée un ensemble de fichiers sous unicore code> dans l'un des répertoires libérés qui ont déjà beaucoup de travaux effectués pour vous. Je ne sais pas s'ils sont officiels ou non, j'ai une question à la liste Perl 5 porteurs pour savoir s'il est prudent de les utiliser.
Même mieux que je peux dire: p> ou même meilleur: p> Unicore / lib / gc_sc / digit.pl code> est
unicore / to / chiffre.pl code>. C'est une cartographie directe de caractères unicode chiffres (bien, vraiment leurs compensations) à leurs valeurs numériques. Cela signifie au lieu de: