Rechercher/remplacer regex
Résolu
arconobo
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
arconobo Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
arconobo Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Rechercher/remplacer regex
- Rechercher remplacer word - Guide
- Rechercher ou entrer l'adresse - Guide
- Remplacer disque dur par ssd - Guide
- Quel site pour remplacer coco - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
6 réponses
Salut,
le problème c'est que l'étoile est avare (« greedy star ») et va aller le plus loin possible avant de s'arrêter. Ça va capturer trop de <span>.
Une solution simple, c'est d'utiliser l'étoile paresseuse (« lazy star ») :
Elle s'arrête le plus tôt possible.
Par contre, cette solution n'est pas optimale car le moteur de regexp est souvent forcé de revenir en arrière... Mais c'est la plus simple à mettre en oeuvre.
;)
le problème c'est que l'étoile est avare (« greedy star ») et va aller le plus loin possible avant de s'arrêter. Ça va capturer trop de <span>.
Une solution simple, c'est d'utiliser l'étoile paresseuse (« lazy star ») :
(.*?)
Elle s'arrête le plus tôt possible.
Par contre, cette solution n'est pas optimale car le moteur de regexp est souvent forcé de revenir en arrière... Mais c'est la plus simple à mettre en oeuvre.
;)
Merci pour cette précision.
C'est vrai que ça m'arrivait souvent qu'il capture quasiment tout le texte. Mais je voulais savoir comment faire pour que ce "(.*?)" capture aussi les saut de ligne ?
J'ai trouvé une solution qui fonctionne mais je pense pas que ce soit la meilleure :
<div>
([^}]*?)<span class="bla">(.*?)</span>
([^}]*?)</div>
je met une accolade parce que je suis presque sur qu'il n'y en a pas dans mon texte et comme ça il ne s'arrête pas au premier saut de ligne.
Il n'y a pas un moyen pour exprimer TOUT (saut de ligne, tab....) jusqu'au premier <span class="bla"> ?
C'est vrai que ça m'arrivait souvent qu'il capture quasiment tout le texte. Mais je voulais savoir comment faire pour que ce "(.*?)" capture aussi les saut de ligne ?
J'ai trouvé une solution qui fonctionne mais je pense pas que ce soit la meilleure :
<div>
([^}]*?)<span class="bla">(.*?)</span>
([^}]*?)</div>
je met une accolade parce que je suis presque sur qu'il n'y en a pas dans mon texte et comme ça il ne s'arrête pas au premier saut de ligne.
Il n'y a pas un moyen pour exprimer TOUT (saut de ligne, tab....) jusqu'au premier <span class="bla"> ?
Ça dépend du langage que tu utilises. En PHP avec PCRE (mais pas POSIX), on peut activer l'option dotall (s), qui force le point à matcher les sauts de ligne. En JavaScript c'est impossible.
Voici la syntaxe :
( https://www.php.net/manual/fr/reference.pcre.pattern.modifiers.php )
Java et les langages .NET ont également adopté le moteur PCRE.
;)
Voici la syntaxe :
/(.*?)/s
( https://www.php.net/manual/fr/reference.pcre.pattern.modifiers.php )
Java et les langages .NET ont également adopté le moteur PCRE.
;)
euh je ne sais pas quel langage j'utilise... C'est pour faire des rechercher/remplacer (pour les expression régulières j'utilise jEdit pour le reste notepad++, j'ai pas encore trouvé l'éditeur qui fait tout ce que je veux)
la syntaxe que tu m'a donné ne fonctionne pas avec jEdit.
c'est bien compliqué c'est expressions régulières qui change selon le langage et le soft...
la syntaxe que tu m'a donné ne fonctionne pas avec jEdit.
c'est bien compliqué c'est expressions régulières qui change selon le langage et le soft...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question