Question

Source

RegexOptions.IgnoreCase est plus cher que ce que j'aurais pensé (par exemple, devrait être à peine mesurable).

En supposant que cela s'applique à PHP, Python, Perl, Ruby, etc ainsi que le C# (qui est ce que je suppose Jeff l'a aide), combien de ralentissement est-il et que dois-je encourir une sanction similaire avec /[a-zA-z]/ comme je le ferai avec /[a-z]/i ?

Était-ce utile?

La solution

Oui, [A-Za-z] sera beaucoup plus rapide que le réglage de la RegexOptions.IgnoreCase, en grande partie parce que des chaînes Unicode.Mais c'est aussi beaucoup plus limitant -- [A-Za-z] ne pas match international accentué personnages, c'est littéralement l'A-Za-z ASCII jeu et rien de plus.

Je ne sais pas si vous avez vu Tim Bray, en réponse à mon message, mais c'est un bon:

L'un des problèmes les plus délicats dans l'internationalisation de la recherche est en majuscule et en minuscule.Cette notion de cas est limité pour les langues écrites en Latin, grec et Cyrillique.Anglophones, bien sûr, la recherche de la casse, si seulement parce qu'ils sont paresseux:si Nadia Jones veut regarder elle-même sur Google elle va probablement juste de taper dans nadia jones et attendez que le système à prendre soin d'elle.

Il est donc assez commune pour les systèmes de recherche pour “normaliser” les mots en les convertissant tous en minuscule ou en majuscule, à la fois pour l'indexation et des requêtes.

Le problème, c'est que la correspondance entre les cas n'est pas toujours aussi simple qu'il est en anglais.Par exemple, l'allemand bas-de-casse caractère “ß” devient “SS” lorsque les haut-tubé, et la bonne vieille capitale “I” lorsque le bas-boîtier en turc devient le sans point “i” (oui, ils ont le “je”, sa majuscule version est “je”).J'ai lu (mais pas vérifié de première main) que les règles pour upcasing caractères accentués tels “é” sont différentes en France et au Québec.L'un des résultats de tout cela est que des logiciels tels que java.Chaîne de caractères.toLowerCase() a tendance à courir étonnamment lent qu'il tente de contourner tous ces coin-cas.

http://www.tbray.org/ongoing/When/200x/2003/10/11/SearchI18n

Autres conseils

Si vous pouvez tolérer que des numéros et des caractères de soulignement dans cette regex, vous pouvez p. ex.utiliser le \w modificateur (syntaxe de Perl).Je crois que certains moteurs de soutien [:alpha:], mais qui n'est pas pur Perl.\w prend en compte les paramètres régionaux que vous êtes, et correspond à la fois des majuscules et des minuscules, et je parie que c'est plus rapide que d'utiliser [A-Z] tout en ignorant la casse.

Si vous êtes inquiet à ce sujet, il peut être utile de régler le cas de tous les haut ou en bas avant de vous enregistrer.
Par exemple, en Perl:

$x = "abbCCDGBAdgfabv";
(lc $x) =~ /bad/;

Peut dans certains cas être mieux que

$x = "abbCCDGBAdgfabv";
$x =~ /bad/i;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top