Je veux obtenir le nombre d'occurrences d'une sous-chaîne dans une chaîne. La chaîne est "hello hello hello"
. Je veux obtenir le nombre de fois "hello hello"
se produit dedans, qui dans le cas ci-dessus est .
Quelqu'un peut-il m'aider s'il vous plaît à trouver une regex pour cela?Regex pour trouver le nombre de fois sous-chaîne "bonjour bonjour" se produit dans la chaîne "bonjour bonjour bonjour"
Répondre
En fonction de chaque que vous voulez compter le nombre d'occurrence de hello
(qui est 3 dans votre exemple) ou hello hello
(Wich est 2), vous pouvez faire:
#!/usr/bin/perl
use 5.10.1;
use warnings;
use strict;
my $str = q/hello hello hello/;
my $count1 =()= $str =~ /(?=\bhello hello\b)/g;
say $count1; # gives 2
my $count2 =()= $str =~ /\bhello\b/g;
say $count2; # gives 3
Essayez:
(?=hello hello)
L'utilisation d'un préanalyse vous permet de trouver des résultats qui se chevauchent. Pour mot entier, vous pouvez essayer:
\b(?=hello hello\b)
Exemple: http://rubular.com/r/om1xn1FmBIles positions bleues marquent un match
En supposant que vous vouliez dire « bonjour » et non « bonjour bonjour », vous pouvez simplement diviser Bonjour. Pas besoin de construire regex supplémentaire
$string="hello hello blah hello blah helloworld hello blah blah hello";
@s = split "hello", $string, -1;
print scalar @s - 1 ."\n"; #get size of array
Maintenant, je ne suis pas un type perl, mais n'est-ce pas/hello/'une regex? Dans ce cas, vous pourriez aussi bien faire face à cela. De plus, notez que la question porte sur '" bonjour bonjour "', ce qui suggère des correspondances qui se chevauchent. – Kobi
Notez que/hello/est une regex, bien que :-) – Thilo
@Kobi: +1. Alors que la division peut probablement être faite sans regex, le chevauchement serait un problème. – Thilo
Voici ce que vous cherchez réellement, Counting the occurrences of a substring - the fastest way.
Cela ne fonctionne pas pour les sous-chaînes qui se chevauchent. – Thilo
use strict;
use warning;
my $str = "hello hello hello bla bla hello bla hello";
my $count = grep /hello/ , split /\s+/,$str ;
print"$count"; #output 5
pourquoi diviser sur l'espace? – Thilo
en fournissant plus de «solution générale» c'est-à-dire, d'abord en séparant la chaîne en mots et ensuite en vérifiant par 'grep' si c'est un mot requis ou non. –
comment supposer que l'appariement doit seulement être fait sur les limites de mots plus générales? – Thilo
- 1. Joomla - « Bonjour tout le monde - Bonjour » Module
- 2. Compilation Bonjour le monde
- 3. CodeIgniter - Bonjour le monde
- 4. i18n Bonjour le monde
- 5. Bonjour dans Ruby
- 6. Assemblée, bonjour question mondiale
- 7. Bonjour mot avec JavaScript
- 8. Bonjour problème Android
- 9. bonjour + bluetooth + iOS
- 10. qu'est-ce que Bonjour?
- 11. Android "bonjour monde" - versions
- 12. Exemple "Bonjour, WebView"
- 13. Bonjour ListView Tutorial Problème
- 14. Zeroconf/Bonjour et Delphi
- 15. Bonjour Client IM
- 16. Bonjour Erreur monde
- 17. Où se trouve la bibliothèque Bonjour COM?
- 18. lauch4j Bonjour le programme mondial
- 19. Bonjour OS avec C# & mono?
- 20. Comment fonctionne Bonjour sur Bluetooth?
- 21. Objective-C Bonjour/TCP Stack
- 22. C++ fenêtre ouverte bonjour monde
- 23. Bonjour tout le monde en Python
- 24. "Bonjour, monde!" exemple pour DevExpress QuantumGrid?
- 25. Android "Bonjour tout le monde" problème
- 26. L'iPhone peut-il utiliser la messagerie Bonjour?
- 27. basic bonjour java résolution d'adresse IP
- 28. Bonjour réseau Aide sur iPhone échantillon WiTap
- 29. SDK iPhone: Bonjour & NSNetService name! = Nom publié?
- 30. Obtenir l'adresse IP du périphérique avec Bonjour
Comment avez-vous ** 3 ** dans votre exemple? – Kobi
Comment est-ce '3'? – codaddict
Bonjour nouvel utilisateur. J'ai modifié votre question et nettoyé un peu. J'ai gardé "3" là, s'il vous plaît modifier si c'était une erreur, ou l'expliquer si ce n'était pas. Merci, et bienvenue à empiler le débordement. – Kobi