[EDIT] aide expression regulière

Eléphant du PHP | 288 Messages

20 août 2008, 18:38

Bonjour à tous,

J'essaye de faire un truc du genre:

J'ai des lignes cobol du genre

Code : Tout sélectionner

20 MAT006-UMBKZ PIC 99 COMP . 20 MAT006-VERBKTO PIC 9(8) COMP . 20 MAT006-VERB PIC X(8) COMP .
Je voudrais être capable de remplacer PIC par une valeur que j'aurais formaté comme suit.

Si après PIC on retrouve
- un chiffre on remplace PIC le chiffre par INTEGER ( le nombre de fois le chiffre apparait ou le chiffre qui sera entre parenthese après PIC )

- X on remplace PIC X(10) par VARCHAR(10)

ainsi de suite.

J'ai essayé pour commencer de remplacer Tout ce qui veint après PIC, PIC inclu, par une valeur et j'y arrive pas. J'ai essayé deux truc:
 $str = preg_replace("/PIC[[:alnum:]]*/i",$valeur,$str);
ici tout ce que je réussi à faire c'est remplacer PIC par le contenu de $valeur mais tout ce qu'il ya après PIC, ie. par exemple X(9), reste.

Ensuite j'ai essayé ceci:

j'espère que j'ai été clair.
Merci d'avance
 $str = preg_replace("/PIC[:blank:]*\([:digit:]+\)[:blank:]*[:alnum:]*/i",$valeur,$str);
Et la J'ai une erreure :
Warning: preg_replace() [function.preg-replace]: Compilation failed: POSIX named classes are supported only within a class at offset 3 in Mon path et la ligne de code.
[EDIT] J'ai plus l'heure, apr contre mon expression marche pas. Voici l'expression sans message d'erreure.
$str = preg_replace("/PIC[[:blank:]]*\([[:digit:]]+\)[[:blank:]]*[[:alnum:]]*/i",$valeur,$str);
[EDIT]

Trouvé j'avais oublié le caractère alphanumérique après l'espace. je poste la reponse.
$str = preg_replace("/PIC[[:blank:]]*[[:alnum:]]\([[:digit:]]+\)[[:blank:]]*[[:alnum:]]*/i",$valeur,$str);
Bon j'espère, j'ai été assez claire,

Merci d'avance