Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Regexp

6 réponses
Avatar
pierre
Bonjour =E0 tous !

Je chercher =E0 faire une regexp qui permettrait de :
- changer toutes les occurences d'un terme (monsite), sauf lorsque
celui-ci fait parti d'un lien en .com (www.monsite.com)

Au d=E9but, j'ai pens=E9 =E0 /monsite/ mais cela change toutes les
occurences.
J'ai essay=E9 /monsite[^.]/ mais cela ne marche plus pour monsite.net

Je vous remercie par avance pour votre aide !

Pierre

6 réponses

Avatar
Thomas vO
À (at) Mon, 15 Dec 2008 02:24:21 -0800 (PST),
"" nous disait (told us):
Bonjour à tous !

Je chercher à faire une regexp qui permettrait de :
- changer toutes les occurences d'un terme (monsite), sauf lorsque
celui-ci fait parti d'un lien en .com (www.monsite.com)

Au début, j'ai pensé à /monsite/ mais cela change toutes l es
occurences.
J'ai essayé /monsite[^.]/ mais cela ne marche plus pour monsite.net

Je vous remercie par avance pour votre aide !



(où $str contient ce que vous voulez modifier)

if ($str =~ m/monsite/ and $str !~ m/monsite.com/) {
$str =~ s/monsite/monnouveausite/g;
}

normalement, ça devrait faire l'affaire... (sauf s'il y a plusieurs
occurences de monsite dont une avec monsite.com sur une ligne si vous
procédez par ligne)

--
Thomas vO - <http://perso.enstimac.fr/~vanouden/>
Avatar
Pierre Valade
On 15 déc, 11:33, Thomas vO <vanouden+
wrote:
À (at) Mon, 15 Dec 2008 02:24:21 -0800 (PST),
"" nous disait (told us):

> Bonjour à tous !

> Je chercher à faire une regexp qui permettrait de :
> - changer toutes les occurences d'un terme (monsite), sauf lorsque
> celui-ci fait parti d'un lien en .com (www.monsite.com)

> Au début, j'ai pensé à /monsite/ mais cela change toutes les
> occurences.
> J'ai essayé /monsite[^.]/ mais cela ne marche plus pour monsite.net

> Je vous remercie par avance pour votre aide !

(où $str contient ce que vous voulez modifier)

if ($str =~ m/monsite/ and $str !~ m/monsite.com/) {
   $str =~ s/monsite/monnouveausite/g;

}

normalement, ça devrait faire l'affaire... (sauf s'il y a plusieurs
occurences de monsite dont une avec monsite.com sur une ligne si vous
procédez par ligne)

--
Thomas vO - <http://perso.enstimac.fr/~vanouden/>



Merci Thomas. Mais ce n'est pas possible de le faire plus simplement
avec une seule REGEX ?
Cela revient à dire :
Comment matcher la chaîne /monsite/ mais jamais /monsite.com/ ?

Ce n'est pas possible ?
Avatar
Damien Wyart
* Pierre Valade in fr.comp.lang.perl:
Mais ce n'est pas possible de le faire plus simplement avec une seule
REGEX ? Cela revient à dire : Comment matcher la chaîne /monsite/ mais
jamais /monsite.com/ ?



Regarder du côté de la syntaxe (?!pattern) dans perlre
(http://perldoc.perl.org/perlre.html ou
http://perl.enstimac.fr/DocFr/perlre.html pour une version en Français
un peu plus ancienne).

--
DW
Avatar
mpg
Le (on) lundi 15 décembre 2008 11:24, a écrit (wrote) :

Je chercher à faire une regexp qui permettrait de :
- changer toutes les occurences d'un terme (monsite), sauf lorsque
celui-ci fait parti d'un lien en .com (www.monsite.com)

Au début, j'ai pensé à /monsite/ mais cela change toutes les
occurences.
J'ai essayé /monsite[^.]/ mais cela ne marche plus pour monsite.net



Est-ce que ce n'est pas justement un cas d'école d'utilisation d'une
assertion « lookahead » ?

s/monsite(?!.com)/autresite/g

semble faire l'affaire chez moi.

Manuel.
Avatar
mpg
Le (on) lundi 15 décembre 2008 13:18, mpg a écrit (wrote) :

s/monsite(?!.com)/autresite/g



Gnarf, grillé par Damien.

M.
Avatar
Pierre Valade
On 15 déc, 13:32, mpg wrote:
Le (on) lundi 15 décembre 2008 13:18, mpg a écrit (wrote) :

> s/monsite(?!.com)/autresite/g

Gnarf, grillé par Damien.

M.



Merci beaucoup, c'est parfait !