2010-11-17 15 views
1

Comment est-ce que je réaliserais mieux ce qui suit:Comment faire un remplacement uniquement sur les parties non-cotées d'une chaîne?

Je voudrais trouver et remplacer des valeurs dans une chaîne dans PHP à moins qu'elles soient dans des guillemets simples ou doubles.

EG.

$string = 'The quoted words I would like to replace unless they are "part of a quoted string" '; 

$terms = array(
    'quoted' => 'replaced' 
); 

$find = array_keys($terms); 
$replace = array_values($terms);  
$content = str_replace($find, $replace, $string); 

echo $string; 

echo « string d doit retourner:

'The replaced words I would like to replace unless they are "part of a quoted string" ' 

Merci d'avance pour votre aide.

Répondre

1

Vous pouvez diviser la chaîne en parties cotées/non cotées, puis appeler str_replace uniquement sur les pièces non cotées. Voici un exemple utilisant preg_split:

$string = 'The quoted words I would like to replace unless they are "part of a quoted string" '; 
$parts = preg_split('/("[^"]*"|\'[^\']*\')/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 
for ($i = 0, $n = count($parts); $i < $n; $i += 2) { 
    $parts[$i] = str_replace(array_keys($terms), $terms, $parts[$i]); 
} 
$string = implode('', $parts); 
+0

Merci, a travaillé comme un charme. Assistance très appréciée :) – Chris