Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2382 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Regexp pour trouver certaines chaînes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Regexp pour trouver certaines chaînes

n°1031879
nimrod_182
Posté le 10-04-2008 à 13:22:27  profilanswer
 

Je débute avec les expressions régulières et je galère un peu.
Je voudrais remplacer les chaînes de caractères d'un projet : "blabla" par fonction("blabla" ).
Je ne veux pas remplacer les lignes qui commencent par '#include'.
Je ne veux pas remplacer les chaînes déjà remplacées.
 
Voilà où j'en suis :
"[^"]*" pour ne prendre deux chaînes sur la même ligne comme une seule, mais je voudrais que ça ne coupe pas quand on rencontre \" dans la chaîne.
^(?:[^i]|i(?!nclude))*$ me donne toutes les lignes qui ne commencent pas par un '#include', mais je sais pas comment la combiner avec l'expression précédente
ensuite je voudrais non seulement ne pas prendre les chaînes précédées par '#include' mais aussi les chaînes précédées par 'fonction('.
 
Merci !  :hello:

mood
Publicité
Posté le 10-04-2008 à 13:22:27  profilanswer
 

n°1031897
franceso
Posté le 10-04-2008 à 13:40:28  profilanswer
 

Tu fais ça avec quoi ?  perl ? awk ? sed ?
 
Perso, je ferais ça avec un script perl tout bête, qui commencerait par recopier telles quelles les lignes commençant par #include, puis ferait la substitution dans les autres.
N'hésite pas à demander si tu veux plus de précisions...


---------------
TriScale innov
n°1031904
nimrod_182
Posté le 10-04-2008 à 13:50:14  profilanswer
 

au début je voulais juste le faire avec le find/replace de visual studio mais apparemment il est limité
je pensais le faire avec PowerGrep, un programme que j'ai trouvé (15j gratuits) qui est une grep avec interface graphique

n°1031909
franceso
Posté le 10-04-2008 à 13:59:11  profilanswer
 

OK. Alors deux choses :
1- tu t'es trompé de catégorie : va plutôt voir du côté de la catégorie "Windows et Softwares"
2- j'ai l'impression qu'avec powergrep tu es obligé de tout mettre dans une seule regexp, et ça risque d'être un peu difficile pour faire ce que tu veux. Tu peux peut-être regarder ici pour avoir quelques idées de départ. En gros, la technique consiste à faire un "negative lookahead" pour éliminer les lignes #include, tout en matchant quand même correctement les autres...


---------------
TriScale innov
n°1031911
wedgeant
Da penguin inside
Posté le 10-04-2008 à 13:59:18  profilanswer
 

nimrod_182 a écrit :

au début je voulais juste le faire avec le find/replace de visual studio mais apparemment il est limité
je pensais le faire avec PowerGrep, un programme que j'ai trouvé (15j gratuits) qui est une grep avec interface graphique


[:blessure]
 
faut aller voir ailleurs monsieur, c'est plus possible maintenant :o (genre poser ta question sur la catégorie windows et/ou prog :D)


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1031916
nimrod_182
Posté le 10-04-2008 à 14:02:13  profilanswer
 

Désolé après avoir fait une recherche c'est là que j'avais trouvé d'autres questions sur le sujet.
Après tout peu importe l'environnement la question porte sur les expressions régulières.

Message cité 2 fois
Message édité par nimrod_182 le 10-04-2008 à 14:02:41
n°1031917
wedgeant
Da penguin inside
Posté le 10-04-2008 à 14:05:21  profilanswer
 

nimrod_182 a écrit :

Désolé après avoir fait une recherche c'est là que j'avais trouvé d'autres questions sur le sujet.
Après tout peu importe l'environnement la question porte sur les expressions régulières.


oui mais non, car sous linux il y a tous les outils "nécessaires et suffisants" pour ce genre de travail (on va même dire que tu n'as que l'embarras du choix :D), alors que sous windows tu es obligé d'aller chercher des softs pas forcément très pratiques et qui ne vont pas vouloir accepter ce qu'on va te proposer :/ (la preuve ...)


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1031925
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 10-04-2008 à 14:27:20  profilanswer
 

nimrod_182 a écrit :


[...]
je voudrais que ça ne coupe pas quand on rencontre \" dans la chaîne.


 
Tu as écrit :  
" : "
suivi de [pas "] le plus de fois possible :   [^"]*
suivi de " : "
Soit : "[^"]"
 
Or tu voudrais tolérer la suite \", tu veux donc :
" : "
suivi de :  
[pas "] : [^"]
OU : |
de la suite \" : [\"]    (je mets des [] ici pour le \, sinon faudrait l'écrire \\ sans les crochets)
toujours le plus de fois possible : *    
Soit : "([^"]|[\"])*"
 

nimrod_182 a écrit :


^(?:[^i]|i(?!nclude))*$ me donne toutes les lignes qui ne commencent pas par un '#include', mais je sais pas comment la combiner avec l'expression précédente


Nier un mot c'est jamais simple avec les regexp.
Si tu cherches "pas #include" suivi d'un truc particulier, ca fait un truc du genre :  
^([^#]|#[^i]|#i[^n]|#in[^c]|#inc[^l]|#incl[^u]|#inclu[^d]|#includ[^e])*un_truc_particulier$
 
Mais tu as l'air d'avoir accès à quelques trucs supplémentaires comme ?!, tant mieux.
 :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°1031949
nimrod_182
Posté le 10-04-2008 à 14:51:28  profilanswer
 

Super pour la première réponse, merci !  :bounce:  
Pour le deuxième truc effectivement la solution que j'ai trouvée avec ?! marche.

n°1031953
o'gure
Modérateur
Multi grognon de B_L
Posté le 10-04-2008 à 14:58:30  profilanswer
 

nimrod_182 a écrit :

Désolé après avoir fait une recherche c'est là que j'avais trouvé d'autres questions sur le sujet.
Après tout peu importe l'environnement la question porte sur les expressions régulières.


ouai enfin, tu le veux mettre en pratique je suppose, non ?
Dans ce cas il est vivement conseillé de poster dans la catégorie créée pour ton environnement...

 

Tant que le sujet reste dans le cadre des expressions régulières qu'on peut trouver sous les UNIX et assimilés, je laisse ouvert, si ca dérape sur la pratique dans un environnement windows je fermerai ce topic. (et pour les trolls y aura une gâterie en plus).


Message édité par o'gure le 10-04-2008 à 14:58:54

---------------
Relax. Take a deep breath !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Regexp pour trouver certaines chaînes

 

Sujets relatifs
comment trouver la version de mon kernel ?commande pour trouver mots qui commence par une certaine lettre
IP dupliquée : comment la trouver ?Qui saurait où trouver un driver pour Canon IP4000?
Openoffice 1 sur ubuntu - ou le trouver?[C/linux] Trouver la bibliothèque qui contiens une fonction donnée
zsh et regexpEteindre l'ecran / le rallumer a certaines heures?
Où trouver Linux en téléchargement?[Mandriva 2007.1 Spring] Recherche de RPM pour apache 1.x
Plus de sujets relatifs à : Regexp pour trouver certaines chaînes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR