OVH Cloud OVH Cloud

perl regexp

3 réponses
Avatar
Heyberger Ludovic
Salut a tous,

je sais plus vers qui me tourner alors je vais vous exposer mon probleme :-=
)

je cherche a faire une regexp qui ferait la chose suivante:

remplacer dans une chaine de character, TOUT ce qui n'est PAS:
- un mot en majuscule : \b[A-Z]*\b
- un charactere entre simple quotes: \b\'.\'\b

j'arrive a faire une regexp qui me remplace exactement ce les trucs
que je veux pas, mais pas le contraire :-s

please help

c'est urgent :-s

merci d'avance

--
105 116 039 115 032 110 111 116 032 097
032 098 117 103 044 032 105 116 039 115
032 097 032 102 101 097 116 117 114 101

3 réponses

Avatar
G(P)L
Heyberger Ludovic a écrit :
Salut a tous,



Enchanté ...


je sais plus vers qui me tourner alors je vais vous exposer mon problem e :-)

je cherche a faire une regexp qui ferait la chose suivante:

remplacer dans une chaine de character, TOUT ce qui n'est PAS:
- un mot en majuscule : b[A-Z]*b
- un charactere entre simple quotes: b'.'b



A la place de "=~", essaies "!~".

Tu peux aussi utiliser "if (!($toto =~ /.../)) {}" (c'est le "!" qui
change tout).


j'arrive a faire une regexp qui me remplace exactement ce les trucs
que je veux pas, mais pas le contraire :-s

please help

c'est urgent :-s

merci d'avance



Bonne nuit
Guillaume Lehmann
Avatar
David Prévot
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Heyberger Ludovic a écrit :
Salut a tous,

je sais plus vers qui me tourner alors je vais vous exposer mon probleme :-)

je cherche a faire une regexp qui ferait la chose suivante:

remplacer dans une chaine de character, TOUT ce qui n'est PAS:
- un mot en majuscule : b[A-Z]*b
- un charactere entre simple quotes: b'.'b

j'arrive a faire une regexp qui me remplace exactement ce les trucs
que je veux pas, mais pas le contraire :-s

please help

c'est urgent :-s

merci d'avance

--
105 116 039 115 032 110 111 116 032 097
032 098 117 103 044 032 105 116 039 115
032 097 032 102 101 097 116 117 114 101





$chaine=~s/(.*?)('.'|[A-Z]*)(.*?)/$2/g;

(si j'ai bien compris ta question, ce qui n'est pas sûr : tes deux
tirets veulent-ils dire "ou", et par quoi veux-tu remplacer...).
Il reste à s'amuser avec le caractère entre tirets : que veux tu faire
de 'a'b'c'd' ?

David
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFEDgt818/WetbTC/oRAuxUAJ0bEWdQyCcdtjhb625T8SANf9qcfgCfTF5x
zIIK6zqB2545EJCVVk3dvVQ =CSD8
-----END PGP SIGNATURE-----


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Heyberger Ludovic
On 3/7/06, David Prévot wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Heyberger Ludovic a écrit :
> Salut a tous,
>
> je sais plus vers qui me tourner alors je vais vous exposer mon problem e :-)
>
> je cherche a faire une regexp qui ferait la chose suivante:
>
> remplacer dans une chaine de character, TOUT ce qui n'est PAS:
> - un mot en majuscule : b[A-Z]*b
> - un charactere entre simple quotes: b'.'b
>
> j'arrive a faire une regexp qui me remplace exactement ce les trucs
> que je veux pas, mais pas le contraire :-s
>
> please help
>
> c'est urgent :-s
>
> merci d'avance
>
> --
> 105 116 039 115 032 110 111 116 032 097
> 032 098 117 103 044 032 105 116 039 115
> 032 097 032 102 101 097 116 117 114 101
>
>

$chaine=~s/(.*?)('.'|[A-Z]*)(.*?)/$2/g;

(si j'ai bien compris ta question, ce qui n'est pas sûr : tes deux
tirets veulent-ils dire "ou", et par quoi veux-tu remplacer...).
Il reste à s'amuser avec le caractère entre tirets : que veux tu fair e
de 'a'b'c'd' ?

David
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFEDgt818/WetbTC/oRAuxUAJ0bEWdQyCcdtjhb625T8SANf9qcfgCfTF5x
zIIK6zqB2545EJCVVk3dvVQ=
=CSD8
-----END PGP SIGNATURE-----


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact .org






merci pour vos reponses, je vais preciser un peu plus la requete:

j'ai une chaine de cette forme la:

MOT 'a' MOT '+' QUELQUECHOSEDAUTRE '-' 42_mauvaisqqchose MOT '*' etc...

en gros c'est un parseur de code en C.

les mots en majuscule ont ete matche par le travail precedement
effectue sur la chaine
les characters entre simple quote ont aussi ete parses
reste a eliminer le cas du : 42_mauvaisqqchose
je partait donc du principe que dans ma chaine, je ne pouvais avoir
que : des mots en majuscule ou des chars entre simple quote.

il me suffisait donc de remplacer tout ce qui n'etait pas de l'un de
ces deux types par ERROR et arreter mon parsing....

et c'est la qu'interviens la regexp de remplacement qui match
l'inverse de ce que je lui donne.

voila j'espere avoir ete assez clair cette fois ci :-)

merci d'avance

--
105 116 039 115 032 110 111 116 032 097
032 098 117 103 044 032 105 116 039 115
032 097 032 102 101 097 116 117 114 101