PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.unix > Aide sur une expression régulière
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.unix Système UNIX.

Aide sur une expression régulière

Réponse
 
LinkBack Outils de la discussion
Vieux 27/01/2007, 12h56   #1
Vincent Ramos
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Aide sur une expression régulière

Bonjour,

Je ne pense pas que ce forum soit le plus adapté pour ma question; je n'en
trouve cependant pas d'autre: les expressions régulières ne sont propres à
aucun système d'exploitation ni à aucun langage. Si vous trouvez mieux,
merci de me rediriger.

Voici: je cherche à modifier toutes les occurrences de paires de guillemets
chiures de mouche, «"», par autre chose (disons «#») dans des chaînes
contenant aussi des balises HTML. Or, il ne faut pas que le texte compris
dans les balises soit touché.

Exemple de chaîne possible:
<div id="bidule">Lorem ipsum "<a href="truc">dolor sit amet</a>", <span
class="machin">"consectetuer"</span> adipiscing elit. "Integer vehicula".
Pellentesque ultricies "porta" est. Maecenas blandit.</div>

Au final, j'aimerais:
<div id="bidule">Lorem ipsum #<a href="truc">dolor sit amet</a>#, <span
class="machin">#consectetuer#</span> adipiscing elit. #Integer vehicula#.
Pellentesque ultricies #porta# est. Maecenas blandit.</div>

J'ai essayé des dizaines de solutions, en vain. Le point de départ est
/"(.*?)"/ => '#$1#', avec quantificateur non avide.

Merci de votre éventuelle aide.
  Réponse avec citation
Vieux 27/01/2007, 13h30   #2
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Aide sur une expression régulière

2007-01-27, 13:56(+01), Vincent Ramos:
> Bonjour,
>
> Je ne pense pas que ce forum soit le plus adapté pour ma question; je n'en
> trouve cependant pas d'autre: les expressions régulières ne sont propres à
> aucun système d'exploitation ni à aucun langage. Si vous trouvez mieux,
> merci de me rediriger.


Par contre, il y a differentes sortes de regexp propres a tel ou
tel outil. Si tu veux des regexps de sed ou de awk, fcou est pas
mal. Si tu veux celles de vim, fce, celles de perl fclp sera
peut-etre mieux.

Mais personne ne t'en voudras pour poser une question sur les
regexps ici. Comme tu ne precises pas, je vais supposer que le
type de regexp n'importe pas.

> Voici: je cherche à modifier toutes les occurrences de paires de guillemets
> chiures de mouche, «"», par autre chose (disons «#») dans des chaînes
> contenant aussi des balises HTML. Or, il ne faut pas que le texte compris
> dans les balises soit touché.

[...]
> J'ai essayé des dizaines de solutions, en vain. Le point de départ est
> /"(.*?)"/ => '#$1#', avec quantificateur non avide.

[...]

Ca, c'est des regexps perl ou PCRE (comme dans PHP) ou de TCL
recents... pas des regexps Unix dans le sens "standards" (BRE,
ERE) du terme.

Tu peux faire: s/((?:^|>)[^<]*)"/$1#/ mais ca ne te permettra
pas d'utiliser le "g" (de s/../../g).

Une approche:

{ sed 's/_/_u/g;s/,/_c/g;s/[<>]/,&/g' |
tr ',\n' '\n,'
echo
} |
sed 's/"/#/g;n' |
tr -d '\n' |
tr , '\n' |
sed 's/_c/,/g;s/_u/_/g'

Ou avec perl:

perl -pe 's/(")|<.*?>|./$1?"#":$&/ge'

(dans les deux cas, on support que le fichier HTML est bien formé
(que les < ont leur > et qu'ils ne sont pas imbriqués) et on ne
prend pas en compte les commentaires (<!-- ... -->)...)

--
Stéphane
  Réponse avec citation
Vieux 27/01/2007, 15h29   #3
Vincent Ramos
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Aide sur une expression régulière

Stephane Chazelas a écrit une réponse complète et très utile.

Merci.
  Réponse avec citation
Vieux 28/01/2007, 09h33   #4
DoMinix
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Aide sur une expression régulière

Vincent Ramos a écrit :
> Stephane Chazelas a écrit une réponse complète et très utile.
>
> Merci.


comme d'hab, merci Stephane.

--
dominix
  Réponse avec citation
Vieux 28/01/2007, 12h47   #5
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Aide sur une expression régulière

2007-01-27, 13:30(+00), Stephane Chazelas:
[...]
> Ou avec perl:
>
> perl -pe 's/(")|<.*?>|./$1?"#":$&/ge'
>
> (dans les deux cas, on support que le fichier HTML est bien formé
> (que les < ont leur > et qu'ils ne sont pas imbriqués) et on ne
> prend pas en compte les commentaires (<!-- ... -->)...)


Je pense que:

sed '/^\([^<"]*\(<[^>]*>\)*\)*"/{
s/\(\([^<"]*\(<[^>]*>\)*\)*\)"\(\([^<"]*\(<[^>]*>\)*\)*\)/\1#\4/g;}'

devrait marcher aussi.

Avec GNU sed (ERE).

sed -r '/^([^"<]|<[^>]*>)*/s/(([^"<]|<[^>]*>)*)"(([^"<]|<[^>]*>)*)/\1#\3/g'

--
Stéphane
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 02h56.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,12454 seconds with 13 queries