39 votes

Comptage du nombre d’occurrences d’une chaîne à l’intérieur d’une autre (Perl)

Quel est le moyen le plus rapide de compter le nombre de fois qu’une certaine chaîne apparaît dans une chaîne plus grande ? Ma meilleure supposition serait de remplacer toutes les instances de cette chaîne par rien, de calculer la différence de longueurs et de diviser par la longueur de la sous-chaîne, mais cela semble plutôt lent, et j’ai besoin d’analyser de grandes quantités de données.

68voto

TLP Points 48922

Vous pouvez capturer les chaînes, puis les compter. Cela peut être fait en appliquant un contexte de liste à la capture avec ``:

Vous pouvez également capturer dans un tableau et compter le tableau. Même principe, technique différente :

17voto

Brian Roach Points 43787
<pre><code></code><p><pre><code></code></pre></pre>

11voto

Mattrition Points 1912

Vous pouvez utiliser un regex global. Quelque chose comme :

5voto

Matthew Lock Points 3945

Juste pour être complet, vous pouvez appeler à plusieurs reprises la fonction d’index dans une boucle et compter toutes les fois où elle a renvoyé l’index de la sous-chaîne dans la chaîne, et changer la position de départ. Cela éviterait d’utiliser des regex, et dans mes tests est un peu plus rapide que les solutions regex.

J’ai adapté un sous-marin pour le faire à partir d’ici: http://www.misc-perl-info.com/perl-index.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X