2014-09-10 1 views
0

Je souhaite remplacer une balise spécifique dans une chaîne de caractères svg. La balise ressemble à ceci:Chaîne Preg_replace avec un caractère générique au milieu

<rect x="0" fill="#C1984F" width="120" height="80"/> 

Mais la couleur doit être remplacée par une autre couleur ...

Je pense que cela devrait fonctionner comme ceci:

$thumbContents = preg_replace('<rect x="0" fill="*" width="120" height="80"/>', '<rect x="0" fill="'.$selectedColor.'" width="120" height="80"/>', $thumbContents); 

Mais je ne sais pas comment écrire le motif regex.

+2

Envisagez d'utiliser DOM au lieu de regex pour cela. – anubhava

+0

trouver simplement l'index de 'fill =" * "' et remplacer (appted) avec la nouvelle chaîne sans utiliser regex. – Braj

+0

Je pense que DOM est assez lourd à cette fin ... c'est le seul cas où j'ai besoin de modifier des tags comme celui-ci. Et c'est toujours ce tag. –

Répondre

1

Si vous insistez à utiliser regexes pour cette ...

$tag = '<rect x="0" fill="#C1984F" width="120" height="80"/>'; 

$newc = 'red'; 

echo preg_replace('~(<rect[^<>]+?fill=")([^"]+)~', "$1$newc", $tag); 

Le modèle signifie

(<rect[^<>]+?fill=") - group 1: "<rect" then anything (but not <>) until fill=" 
([^"]+) - group 2: anything but not a quote (i.e. the color value) 

remplacement:

$1 - whatever has been captured by the group 1 
$newc - new color value 
+0

Vous devriez faire '~ (] +? Fill =") [^ "] + ~' à la place. Cela évite de sauvegarder des informations inutiles et de traiter un nouveau groupe, ce qui accélère un tout petit peu. –

1

vous pouvez essayer ceci:

<script> 
$(document).ready(function(){ 
    var list = document.getElementsByTagName("rect")[0]; 
    alert(list.getAttribute('fill'));// change the value here 

}); 
</script> 
<rect x="0" fill="#C1984F" width="120" height="80"/> 

désolé mais c'est en javascript.

+0

Merci mon pote mais j'ai besoin d'une variante PHP car je génère un téléchargement avec le fichier modifié –

Questions connexes