petit soucis avec un preg_replace - PHP - Programmation
Marsh Posté le 24-11-2003 à 15:41:11
euh... question con. il sert à quoi ton backslash en début de chaque regexp?
Marsh Posté le 24-11-2003 à 15:45:48
ben deja c'est le contraire, l'expression a verifier est en premier, et la chaine de remplacement en 2nd
enfin en tout cas j'ai fait ca ce matin et j'ai fait :
$ToPreg=preg_replace("#\[size=([0-9])\](.*?)\[/size\]#si",'<font size="$1">$2</font>', $ToPreg); |
Marsh Posté le 24-11-2003 à 15:56:41
gizmo a écrit : euh... question con. il sert à quoi ton backslash en début de chaque regexp? |
Il échappe < qui de toute façon n'est pas un meta-caractère en regexp perl si mes souvenirs sont bons. Donc en gros il ne sert à rien, mais n'empêche pas la regexp de fonctionner correctement.
Marsh Posté le 24-11-2003 à 15:59:08
KrisCool a écrit : |
C'est bien ce qu'il me semblait, mais je voulais être sûr. Bon, comme c'est confirmé, je ne vois pas d'où viendrait l'erreur dans ce cas
Marsh Posté le 24-11-2003 à 16:36:14
chacal_one333 a écrit : je comprend pas pourquoi tu a un ' au debut |
C'est le délimiteur de la regexp perl.
Toi tu utilises le #, lui une apostrophe simple. Les programmeurs PERL ont tendance à utiliser / pour délimiter les leurs.
Marsh Posté le 24-11-2003 à 17:14:02
ben remplace ' par #, je crois pas que ' soit valide en php
Marsh Posté le 24-11-2003 à 17:44:50
le probleme vient des face=(.*?)
il faut limiter avec [a-zA-Z]+ au lieu de .*?
Teste et approuve :
Code :
|
Marsh Posté le 24-11-2003 à 18:14:19
karamilo a écrit : le probleme vient des face=(.*?)
|
Si tel est le cas, il s'agit d'un bug dans le moteur des regexp. En effet, le ? oblige la regexp à prendre la plus petite expression possible correspondant au pattern.
Marsh Posté le 24-11-2003 à 18:33:10
ouaip ca y ressemble fortement.
en isolant le probleme, on voit que c'est le 1er face= qui fait tout merder.
Marsh Posté le 25-11-2003 à 13:03:39
Ca me semble normal vu l'ordre des regexp. Il prend la première regexp et le plus court qu'il peut faire c'est
<font face=System>test 02 </font>
<font size=7>test 03</font> ça pour matcher ça règle. Un bug aurait été qu'il applique la règle une sur tout ça :<font face=Arial size=5>test 01</font>
<font face=System>test 02 </font>
<font size=7>test 03</font>
Marsh Posté le 24-11-2003 à 15:15:04
je voudrais remplacer ça :
<font face=Arial size=5>test 01</font>
<font face=System>test 02 </font>
<font size=7>test 03</font>
en ça :
[font=Arial][size=5]test 01[/size][/font]
[font=System]test 02 [/font]
[size=7]test 03[/size]
j'utilise ça :
$texte = preg_replace("'\<FONT face=(.*?) size=([1-7])>(.*?)<\/FONT>'si", "[font=\\1][size=\\2]\\3[/size][/font]", $texte);
$texte = preg_replace("'\<FONT face=(.*?)>(.*?)<\/FONT>'si", "[font=\\1]\\2[/font]", $texte);
$texte = preg_replace("'\<FONT size=([1-7])>(.*?)<\/FONT>'si", "[size=\\1]\\2[/size]", $texte);
et ça me fait ça :
[font=Arial][size=5]test 01[/size][/font]
[font=System>test 02 <FONT][size=7]test 03[/size][/font]
Comment je peux faire pour qu'il ne me fasse pas ça :
[font=System>test 02 <FONT]