Je suis honnête avec regexes mais déconcerté ici. Je vais avoir du mal avec le groupe 2 strong>, ci-dessous. Cependant, je pense que cela devrait être assez facile pour un gourou ... regex Je suis en train de faire correspondre [Mise à jour: Pour référence future] Note: l'espace après chaque mot est essentiel em> p> Dans mon cas, cela se traduit par: em>
c'est est le bare-bones, réponse la plus simple. La meilleure approche, plus panda noir la réponse ", ci-dessous. Il permet une quantité d'espaces et est plus rapide pour un moteur de RE à traiter. Em> p> Je dois diviser l'entrée suivante en groupes très spécifiques . P> Remarque: les chiffres ne font pas partie de l'entrée. Autrement dit, chaque ligne d'entrée commence par la lettre p. Em> p> Je dois briser l'entrée en groupes de match tels que p> 1 groupe = Compte tenu de l'entrée ci-dessus, un groupe 2 serait la suivante: p> est le regex je suis venu avec et id ne fonctionne pas pour le groupe 2: p> Quelle devrait être l'expression régulière pour « groupe 2 » qui correspond à une ou plusieurs instances des mots « statique » ou « finale ». Une solution appropriée serait extensible pour correspondre à tout sous-ensemble de tous les mots tels que [statique, final, transitoire, volatile]. P> p> Problème h2>
zéro ou plusieurs instances d'un ensemble de mots-clés, dans l'ordre p>
La solution la plus simple (dérivé de 'de réponse) est: em>
! ((keyword1 | keyword2 | mot clé3) *) code> p> ((statique | final) *) code> p>
Entrée h2>
Groupes h2>
public ou privé ou protégé
groupe 2 = 0 ou plusieurs instances de "statique" ou "définitif" strong> strong>
groupe 3 = type de données
groupe 4 = nom de la variable
groupe 5 = valeur p> Groupe 2 Détails h2>
Failed Solutions h2>
^.*(public|private|protected)\s+(static\s+|final\s+)*\s+([^ ]+)\s+([^ ]+)\s*(;|=)(.*)$
Résumé h2>
4 Réponses :
Ceci correspond à zéro ou plusieurs instances des mots "statiques" ou "finale": Comme vous pouvez le voir à partir de ces extraits de Perl: p> Si vos matchs ne fonctionnent pas, le problème est probablement ailleurs ailleurs p> p>
pas exactement. Dans votre exemple, au lieu de faire correspondre "finale statique", vous correspondez à "statique". Ce qui signifie que si je substitue (statique | finale) dans la plus longue regex supérieure, il correspondra aux entrées 3-5 mais ne correspond pas aux entrées 1 et 2 ...
Ah, je vois. @ La solution de REFP serait la voie à suivre.
Pouvez-vous tout attraper entre entre -bures et vous assurer que les groupes 3 et plus existent? P>
groupe 2 = (((? :( ?: statique | Final | Transient | Volatile) \ S +) *) P> P> P>
Cela a parfaitement travaillé pour moi et est assez élégant et décemment performant (n'a pas pris beaucoup de temps). Je vais tester cela un peu plus mais je pense que c'est ce dont j'ai besoin.
Ce qui précède n'est pas correct cependant, il correspondra à la "finale finale" "finale finale statique", etc.
Testé cela un peu plus et ça a l'air bien mais je ne comprends pas ça. Pourquoi avons-nous besoin du deuxième groupe de non-capture? À un niveau élevé, comment cela fonctionne-t-il?
@gmale Le groupe externe non capturant attrape toutes les combinaisons des mots statiques, finales, transitoires et volatiles qui existent, y compris l'espace qui sépare le mot du mot suivant à venir. Le groupe interne non capturant attrape un seul mot.
Le groupe externe capture l'ensemble du shebang.
Grande explication. Une question: pourquoi avons-nous besoin des groupes non capturants? Signification, pourquoi cela ne fonctionne-t-il pas lorsque nous supprimons le?: Pièces? Est-ce que ... nous voulons que cela correspond à chaque mot, mais ne les consommez pas. Ensuite, nous voulons que cela correspond à plusieurs instances de chaque mot et ne les consommez pas? Ensuite, le groupe le plus externe fait la consommation finale de l'ensemble du shebang?
Cela fonctionne sans le?: Pièces; Je viens de les ajouter généralement lorsque je ne veux pas que le moteur d'expression régulier reste une trace des captures inutiles. Il est plus efficace pour le moteur RE.
Merci, Gmale :) @Refp Ma réponse à votre commentaire est toujours debout. Votre expression échoue toujours d'une certaine séquence de la déclaration de déclaration, mais c'est bon, car l'OP n'a jamais demandé qu'il soit assez compliqué pour correspondre exactement à ce qu'un compilateur. J'accepte votre -1 tant que l'OP est satisfait. Bonne journée :)
Du: sortie: strong> p>
Remarque: cela correspondra à «statique statique» et «finale finale statique».
À la personne qui a signalé cette question comme "trop localisée": correspondant à zéro ou plus d'instances d'un sous-ensemble de mots est extrêmement puissante et utile de manière générique. En fait, si je trouve une réponse à cela, je peux penser à des dizaines d'autres endroits pour l'utiliser.
Quel est le résultat final que vous essayez d'accomplir? Qu'essayez-vous d'extraire