2010-09-14 6 views
1

J'ai un fichier php qui peut lire le contenu d'autres fichiers parfaitement et les renvoyer sous forme de chaîne.utiliser php, grep et regex pour rechercher et remplacer des lignes de code dans le fichier

$contents = $file->read(); // return as string. 

je dois être en mesure de rechercher et de remplacer certaines lignes

lignes qui commencent par $this->Session->setFlash et se terminent par , true)); doivent être remplacés par des lignes

qui commencent par $this->Session->setFlash et se terminent par , true), 'default', array('class'=>'flash_failure'));

J'ai grep dans ma machine, si cela aide.

finalement après que le contenu est modifié, j'ai une fonction qui va écrire le contenu de retour

$file->write($contents); 

Je sais que cela aide à trouver les lignes, mais je ne sais pas comment remplacer.

^.*Session->setFlash.*, true\)\);$ 

Répondre

0

la solution est donc:

$contents = preg_replace('/^(.*Session->setFlash.*, true\))\);$/m', 
             "$1, 'default', array('class'=>'flash_failure'));", $contents); 

le modificateur multiligne est la clé.

1

Vous pouvez essayer:

$contents = $file->read(); // return as string. 

// change contents. 
$contents = preg_replace('/^(\$this->Session->setFlash.*?), true\)\);$/',"$1, true), 'default', array('class'=>'flash_failure'));",$contents); 

$file->write($contents); 
+0

votre code fonctionne mais de toute façon il ne fonctionne pas sur le contenu $ quand je fais un $ contents = file_get_contents ($ filename); Votre code fonctionne parce que j'ai testé ici à http://codepad.viper-7.com/V3BS6H –

+0

Que voulez-vous dire par «ne fonctionne pas»? Essayez d'imprimer la valeur de '$ contents' après l'avoir obtenue en utilisant' file_get_contents' – codaddict

+0

il y a plusieurs lignes dans le fichier. donc je soupçonne que j'ai besoin de mettre un modificateur/m. mais je ne peux pas le faire fonctionner. Voir ceci pour plus de détails. http://codepad.viper-7.com/1twh2k –

Questions connexes