2013-05-02 1 views
0

мне нужно изменить слово только после того, как Maildir, в этом Exemple NULL строки: (слово NULL может быть любое слово.)изменить слово в строке текстового файла с PHP

[3]=> 
    string(42) "SPAM 
* ^Subject: \[SPAM\].* 
Maildir/.NULL/" 

Я использую этот код:

if($filecontent = file_get_contents($filename)){ 

    $repertoire = "SPAM"; 
    $tab = explode("#", trim($filecontent)); 
    $tab[3] = preg_replace("#Maildir/*#", 'Maildir/.'.$repertoire.'/', $tab[3]); 

    var_dump($tab); 

Но у меня есть

string(48) "SPAM 
* ^Subject: \[SPAM\].* 
Maildir/.NULL/.SPAM/" 

Как это изменить в Maildir/.SPAM, потому что .NULL в избытке.

string(48) "SPAM 
* ^Subject: \[SPAM\].* 
Maildir/.SPAM/" 
+0

потому что слово ** NULL * * может быть любым словом. – mpgn

ответ

0

Вы можете сделать так:

preg_replace('~Maildir/\K\.NULL/(?=\.SPAM)~', '', $string); 

или для любого слова:

preg_replace('~Maildir/\K[\w.-]++/(?=\.SPAM)~', '', $string); 

я испытал с:

$string = <<<LOD 
SPAM 
* ^Subject: \[SPAM\].* 
Maildir/.NULL/.SPAM/ 
LOD; 
echo preg_replace('~Maildir/\K[\w.-]++/(?=\.SPAM)~', '', $string).'<br/>'; 
echo preg_replace('~Maildir/\K\.NULL/(?=\.SPAM)~', '', $string).'<br/>'; 
+0

Если я попробую ** preg_replace ('~ Maildir/\ K \. [\ W .-] ++/(? = \. SPAM) ~', '', $ filecontent); ** ничего не меняется. То же самое для первого решения. – mpgn

+0

@MartialE: вы уже делали «эхо»? Я отредактировал свой пост с тестовым кодом. Если он не работает с вашей строкой, отправьте строку, которую вы попробуете. –

+0

Да, это работа, но только два шага: сначала я взорву и preg_replace, у меня есть ** Maildir/.NULL/.SPAM/**, после того, как я использую ваше решение. Нет решения, чтобы сделать это напрямую? 1) ** Maildir/.NULL/** to ** Maildir/.SPAM/**? – mpgn

Смежные вопросы