2010-06-06 3 views
1

Vous obtenez un problème où preg_replace ne remplace que la première occurrence trouvée puis saute à la ligne suivante et ignore les parties restantes sur la même ligne que je souhaite également remplacer. Ce que je fais est que je lis un fichier CSS qui a parfois plusieurs "url (media/pic.gif)" sur une ligne et remplace "media/pic.gif" (le fichier est alors sauvegardé comme une copie avec les pièces remplacées). Le contenu du fichier CSS est mis dans la variable $ resource_content de:preg_replace ne remplace que la première occurrence puis passe à la ligne suivante

$resource_content = preg_replace('#(url\((\'|")?)(.*)((\'|")?\))#i', '${1}'.url::base(FALSE).'${3}'.'${4}', $resource_content); 

Est-ce que quelqu'un sait une solution pour pourquoi il ne remplace que le premier match par ligne?

Répondre

4

Essayez:

$resource_content = preg_replace('#(url\((\'|")?)(.*?)((\'|")?\))#i', '${1}'.url::base(FALSE).'${3}'.'${4}', $resource_content); 

qui gardera le (.*) terme de contenu correspondant à "trop".

+0

Merci, ce a résolu le problème! – ImDom

+1

Devrait probablement utiliser [^)] + au lieu de. *? – Oblio

0

faire un exemple - Si votre variable $ est:

STARTING 
FIRSTT AAA 
SECONDD AAA 

1) si vous implémentez cette fonction:

$variable = preg_replace('/STARTING(.*)AAA/', 'REPLACING_STRING', $variable); 

ça change tout (du départ pour la dernière AAA) et la résultat:

REPLACING_STRING 

2) si vous utilisez:

$variable = preg_replace('/STARTING(.*?)AAA/', 'REPLACED_STRING', $variable); 

Le résultat est:

REPLACING_STRING 
SECOND AAA 
Questions connexes