12
votes

Existe-t-il un moyen de capturer chaque groupe si plusieurs occurrences sont assorties?

Je ne sais pas comment expliquer le problème en anglais clair, alors je me aide avec l'exemple de Regexp. J'ai quelque chose de similaire à celui-ci (l'exemple est à peu près simplifié): xxx

Ce modèle correspond à la fois à ces lignes: xxx

le Le motif contient 3 groupes: le premier correspond à une ligne, le 2ème correspondant au premier numéro dans la ligne et le 3ème correspond à un deuxième numéro dans la ligne.

est-il possible d'obtenir tous ces numéros? Le matcheur n'a que 3 groupes. Le premier retourne 99 - 55 , le 2e - 99 et le 3ème one - 55 .

SSCCE: xxx


0 commentaires

3 Réponses :


6
votes

Si Je suis Pas erroné (une possibilité distincte), alors chaque fois que vous appelez matcher.matches () , Il met à jour avec la prochaine correspondance. SO, fondamentalement, modifiez le si (correspondeur.matches ()) dans un tandis que (correspondeur.find ()) , et vous êtes prêt à partir.

EDIT: En réalité, ce n'est pas correspondant , c'est trouver qui fait cela:

http: //download.oracle.com/javase/7/docs/api/java/util/regex/matcher.html#find%28%29

Voici un exemple de l'utilisation:

http://download.oracle.com/javase/tatuuteur/ Essential / Regex / Test_Harness.html


4 commentaires

Est-ce correspondant.Matchs () ou Matchers.Find () qui renverra chaque fois que vous l'appelez? (ou les deux!)


J'ai répondu à une question hier sur correspondant et rappelez-le, donc je suis assez sûr de cela. Trouver , je ne sais malheureusement pas.


Je ne peux pas le faire fonctionner. Avez-vous un code qui a succédé à cette tâche?


Hélas, je n'ai pas d'environnement de développement Java approprié mis en place, donc je ne peux pas tester de code. Cependant, il semble que Josh.trow était correct. trouver () correspondra au prochain ... Match.



2
votes

Vous essayez de faire correspondre chaque ligne séparément?

Retirez le + pour correspondre à une seule ligne et modifier: P>

   while (matcher.matches()) {


0 commentaires

10
votes

Une remarque de plus sur la réponse de Mike Caron: le programme ne fonctionnera pas si vous remplacez «si» avec «si» et utilisez »et utilisez« Trouver »au lieu de« Match ». Vous devez également modifier l'expression régulière: le dernier groupe avec le "+" doit être supprimé, car vous souhaitez rechercher plusieurs occurrences de ce modèle, et non pour une occurrence d'un (..) + groupe.

pour clarté, il s'agit du programme final qui fonctionne: xxx

Il vous donnera trois groupes pour chaque ligne, où le premier groupe est la ligne entière et les deux groupes suivants contiennent chacun un numéro. C'est un bon tutoriel qui m'a aidé à mieux comprendre: http: //Tutorials.jenkov. COM / JAVA-REGEX / MATCHER.HTML


0 commentaires