Les autres réponses présupposent que vous disposez d'un moteur regex qui prend en charge la correspondance non gourmande, qui est une extension introduite dans Perl 5 et largement copiée dans d'autres langages modernes ; mais elle est loin d'être omniprésente.
De nombreux langages et éditeurs plus anciens ou plus conservateurs ne prennent en charge que les expressions régulières traditionnelles, qui ne disposent d'aucun mécanisme permettant de contrôler l'avidité de l'opérateur de répétition. *
- il correspond toujours à la chaîne la plus longue possible.
L'astuce consiste alors à limiter ce qu'il est autorisé à associer en premier lieu. Au lieu de .*
que vous semblez rechercher
[^>]*
qui correspond toujours à autant de quelque chose que possible ; mais le quelque chose n'est pas seulement .
"tout caractère", mais plutôt "tout caractère qui n'est pas >
".
En fonction de votre application, vous pouvez ou non activer une option permettant à "tout caractère" d'inclure les nouvelles lignes.
Même si votre moteur d'expression régulière prend en charge la correspondance non avide, il est préférable d'expliquer clairement ce que vous voulez dire. Si cela es ce que vous voulez dire, vous devriez probablement le dire, au lieu de compter sur une correspondance non gourmande pour (espérons-le, probablement) faire ce que je veux dire.
Par exemple, une expression régulière avec un contexte de fin après le caractère générique comme .*?><br/>
sautera par-dessus tout élément imbriqué >
jusqu'à ce qu'il trouve le contexte de fin (ici, ><br/>
), même si cela nécessite de chevaucher de multiples >
et des retours à la ligne si vous le permettez, où [^>]*><br/>
(ou même [^\n>]*><br/>
si vous devez explicitement interdire les nouvelles lignes) ne peut évidemment pas le faire et ne le fera pas.
Bien sûr, ce n'est toujours pas ce que vous voulez si vous devez faire face à <img title="quoted string with > in it" src="other attributes"> and perhaps <img title="nested tags">
mais à ce stade, vous devriez finalement renoncer à utiliser les expressions régulières pour ce type de recherche, comme nous vous l'avions dit au départ.
7 votes
Dans quelle langue exécutez-vous la REGEX ?