Voici ma chaîne de test abstraite: p>
test de test de test p>
bleu p>
test de test de test p>
rouge 23 p>
test de test de test p>
gris p>
test de test de test p>
bleu p>
test de test de test p>
rouge 99 p>
test de test de test p>
gris - blanc p>
test de test de test p>
J'essaie de faire correspondre le texte entre le deuxième deuxième seconde strong> "bleu" et "gris-blanc" p>
Fondamentalement, je analyse du code et j'ai besoin de 2 règles: p>
1.) Trouvez le rouge si entre "bleu" et "gris" p>
2.) Trouvez le rouge si entre "bleu" et "gris-blanc" * Je ne peux pas être sûr de l'ordre des strophes p>
Le premier n'est pas trop difficile: lien p>
Mais je ne peux pas comprendre la deuxième règle. Tout ce que j'ai essayé ... comme (? S) (bleu) (. *?) (gris (?! \ s + test)) ... correspond toujours au premier "bleu", au lieu de sauter dessus p>
est là à l'écart (. *?) dans 'mais seulement si cela ne contient pas "bleu"' ' p>
Quelqu'un en connaît une astuce que je ne fais pas? p>
3 Réponses :
Je pense que vous recherchez cela en fonction de vos 2 règles bien qu'elles ne correspondent pas à votre regex. REGEX101
(blue).*?[^ ](red) .*?[^ ](grey( | - blue)?)
Ce REGEX Ce que vous pourriez faire est de capturer le bleu puis utilisez une correspondance gourmande pour correspondre au dernier "rouge" suivi de 1 chiffres. Utilisez ensuite un motif non gourmand pour correspondre jusqu'au premier "gris-blanc" p> voir le Démo Regex P> P> (? S) (Bleu) (. *?) (gris (?! \ s + test)) code> correspondra à la partie entière entre le premier bleu et le dernier gris à cause du lookahead négatif
(gris (?! \ s + test)) code > qui correspond au milieu et échoue au regard négatif.
(?s)(blue).*?(red).*?(grey(?: - blue)?) The above regex matches BOTH reds... but I need to be able to tell which is which (I can't rely on their order).Let me re-write the question to clarify the objective:I need two regex, I already found an answer for 1.), but am looking for an answer for 2.):1.) Find "red XX" if between "blue" and "grey" (match contains only red 23)2.) Find "red XX" if between "blue" and "grey - white" (match contains only red 99)
J'ai mis à jour ma réponse. Au lieu de réécrire votre question comme réponse, vous pouvez l'ajouter à la question à la place.