Regex capture toutes les occurrences d'un mot dans un délai de deux délimiteurs
Dire que j'ai une longue chaîne de texte, et je veux saisir à chaque fois le mot this
est mentionné dans l'arrondi entre parenthèses. Comment pourrais-je le faire? Le schéma suivant uniquement les matchs de la première this
, ignorer toutes les occurrences après:
/\(.*(this).*\)/g
Par exemple, à l'aide du modèle ci-dessus sur le texte suivant:
Etiam scelerisque, nunc ac egestas consequat, (odio ce nibh euismod nulla, eget auctor orci nibh vel ce nisi. Aliquam ce erat volutpat).
Ne reviendra que le premier this
après le mot odio
.
Ce que je fais mal?
à priori, je ne vois rien de mal avec ce dessin...poste le code que vous utilisez dans
Ok, donc il y a 3 "ce" dans votre texte d'exemple. Alors, quel est le résultat attendu?? Voulez-vous le comptage du nombre de "ce" dans ces crochets? Ou voulez-vous simplement à retourner tout est entre ces crochets? décrire clairement ce que vous voulez comme sortie
+1 propter uti lingua latina. 🙂
Ok, donc il y a 3 "ce" dans votre texte d'exemple. Alors, quel est le résultat attendu?? Voulez-vous le comptage du nombre de "ce" dans ces crochets? Ou voulez-vous simplement à retourner tout est entre ces crochets? décrire clairement ce que vous voulez comme sortie
+1 propter uti lingua latina. 🙂
OriginalL'auteur Globalz | 2010-07-25
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ne pas être gourmand.
/\(.*?(this).*?\)/g
Deuxièmement, si votre but est de compter le nombre d'occurrences de "il", une expression régulière est probablement pas le bon outil ici. Le problème, c'est que vous avez besoin pour correspondre à la clôture de délimiteur pour déterminer que le premier " ce " est fermé, ce qui signifie que le fait de continuer à appliquer les regex ne correspondent à rien de ce à l'intérieur que déjà consommé de l'ensemble de séparateurs.
La regex que j'ai ci-dessus va attraper des choses comme:
foo (baz this bar) (foo this)
Mais pas (il ne fait correspondre deux fois, une fois pour chaque ensemble de séparateurs):
foo (this this bar) baz (this this this)
Essayez d'utiliser un simple passe-scanner au lieu d'une regex. Une autre alternative consiste à utiliser deux expressions régulières, l'une pour séparer la chaîne en clos et non clos sections, et un autre à la recherche au sein de la joint régions.
OriginalL'auteur Borealid
l'utilisation de
.*
va correspondre à chaque caractère unique dans votre chaîne de recherche. Donc, ce que vous êtes en train de faire ici est goulûment correspondance de tout ce qui est avant et après la première occurrence dethis
trouvé à l'intérieur des parenthèses. Votre courant le résultat d'un match probablement ressembler un peu les suivantes:Où le premier élément d'un tableau est l'ensemble de la sous-chaîne correspondant à l'expression, et tout ce qui suit sont vos regex est capturé valeurs.
Si vous souhaitez faire correspondre chaque occurrence de
this
à l'intérieur des parenthèses, une solution serait d'abord une sous-chaˆ ıne de tout à l'intérieur des parenthèses, puis de rechercher lesthis
dans cette sous-chaîne:OriginalL'auteur Chris
J'ai mis en place la regex de joindre tous alphanumberic caractères à l'aide de regex ci-dessous:
Espère que cela aide.
OriginalL'auteur shashi
(ce)
la chaîne ci-dessus fonctionne pour moi, l'essayer sur http://regex101.com
OriginalL'auteur LuisCarlos Rodriguez