OVH Cloud OVH Cloud

exp reguliere (supprimer *)

15 réponses
Avatar
yvon.thoravallist
j'essaie de faire un convertisseur rtf->xml (sommaire)

dans le rtf il y a des \* (s'applique à tout) que je veux supprimer,
exemple :
\fcharset256\fprq2{\*\panose 02000500000000000000}Times;}{\f5\fnil\fchar
que je voudrais transformer en :
\fcharset256\fprq2{\panose 02000500000000000000}Times;}{\f5\fnil\fchar
(càd même chose en "rempaçant "\*" par "")

j'ai fais des tas d'essais avec prec[ereg]_replace mais j'obtiens tjs ca
:
...\*\panose... convertit en :
...\\panose... (donc avec deux backslah de suite...)
alors que je souhaite :
...\panose...



--
Yvon

5 réponses

1 2
Avatar
yvon.thoravallist
Nudrema wrote:

il me semble que tu as dû utiliser '*' comme masque... or c'est juste
une étoile échappée, il faut toujours doubler les -> '*' devrait
mieux fonctionner...


marche pas échappe le ...
--
Yvon

Avatar
yvon.thoravallist
pcrt wrote:


c'est normale tu remplace l'asterix par rien. Le résultat est cohérent. Vaut
mieux récupérer "*" et le remplacer par ""


oui, tu veux dire que là (ce que j'avais fait) je ne faisais qu'échapper
le *, mais bon ca ne peut pas marcher non plus, je viens juste
d'essayer... le dernier de "*" escape le " final...

en fait je vous remercie tous j'ai trouvé cette soluce :

chr(92)."*" et là, pas de pétard vec les escapes...
--
Yvon Thoraval
http://OrganisationPolitique.com hébergé par :
http://ouvaton.coop/

Avatar
yvon.thoravallist
Guillaume Bouchard wrote:

Mais avec str_replace('*','',..); Aucun probleme.


ouias, ouais, c'est ce que j'ai fini par faire...
--
Yvon

Avatar
yvon.thoravallist
Nudrema wrote:

Il faut garder en mémoire que est le caractère d'échappement, ce qui
veut dire que, chaque fois qu'il apparaît seul, il échappe le caractère
suivant. Ceci peut provoquer des résultats surprenants, il faut donc
toujours utiliser doublé dans une chaîne de caractères.

utilisez plutôt "*" ou "*" ...


bon, ca c'est ok, mais est-ce que c'est la même chose avec
preg_math[_all] ?

dans nom "convertisseur" rtf -> xml.
j'ai des chaines comme ça (sans les ") :

"rtf1macansicpg10000cocoartf102"
"fonttblf0fromanfcharset77 Times-Bold;f1fromanfcharset77
Times-Roman;"
"colortbl;red255green255blue255;red255green0blue0;"

dans une première étape, je veux juste sortir un tableau contenant :
rtf1, mac, ...
fonttbl, f0, ...
clortbl, red255, ...

et j'essaie un preg_match_all :
$a="rtf1macbidule";
preg_match_all("/(w+)[ ||;]/i",$a,$m);

$m est désespéremment vide... (même dans le cas simple où $a="rtf ";)
pourtant j'échappe bien l'antislash ???

je pense que le pb vient de "" parce que des preg_match j'en ai déjà
faits mais sans antislash... d'après le manuel "syntaxe des masques"
qui dit : "pour rechercher les antislash, il faut écrire : "" " ???

pour la terminaison j'ai soit rien (fin de chaine ou suivant) soit un
blanc (il n'y a plus de n et/ou r dans ma chaîne) donc j'ai mis
"naïvement" :
[ ||;] MAIS est-ce que || pour rien est correct ? où dois-je simplement
mettre [ |;](blanc ou ";") ???

--
Yvon

Avatar
yvon.thoravallist
Nudrema wrote:

bah non avec un preg_match il faut échapper en plus les caractères
spéciaux... je te conseille perso d'utiliser des simple-quotes et
d'échapper , *, $, ' ', et tout ce qui est spécial...


OK, échapper les caractères spéciaux c'est OK, MAIS, il me semble que
j'ai un pb spécifique avec r, je m'explique je découpe des chaînes
comme ca :

$a="rtf1macansicpg10000cocoartf102"; (entre-autres, ce n'est pas la
seule forme, il peut y avoir un blanc ' ' au début ou ca peut se
terminer par un ';' un blanc ' ' ou rien du tout...
$mmm=preg_match_all('/[\| ](w+)[ |;]*/u',$a,$m);

je n'arrive pas à retrouver 'rtf1' dès qu'il y a un 'r' après le la
cha^ne qui suit, jusqu'au prochain (ici mac) n'est pas retournée

--
Yvon

1 2