2012-01-27 96 views
1

我有一個字符串,我想用另一個字符串替換字符串中的單詞。我知道上述不會工作,但我需要能夠使用一組模式和替換。搜索並用替換替換整個字符串

我想$ replacement_string是隻是「夾克

有人能指出我到了一個解決方案?

感謝

+0

改變了我原來的答案,更接近於原始的代碼。所有你可能要做的只是在原始模式字符串周圍添加'。*'......這樣就清除了字符串的其餘部分,併爲你留下一個替換字。 – summea 2012-01-27 23:57:07

回答

1

也許如果你調整了原來的代碼,就有點像這樣:

$patterns = array("/.*jacket.*/i", "/.*jeans.*/i"); 
$replacements = array("jacket", "jeans"); 
$string = 'Red jackets'; 
$replaced_string = preg_replace($patterns, $replacements, $string); 

把在那裏將清除出字符串的其餘部分......,讓你只用那些.*你想要的替換字符串。

+0

感謝它正如我所願 – Ivar 2012-01-28 01:27:19

2

你知道上述不會工作怎麼樣?

審查的PHP開發者指南:http://php.net/manual/en/function.preg-replace.php

我所引述的部分值得關注:

模式

要搜索的模式。它可以是字符串或 字符串的數組。

更換

的字符串或使用字符串來替換陣列。如果此參數是 字符串,並且模式參數是數組,則所有模式將由該字符串替換爲 。如果模式和替換參數 都是數組,則每個模式將替換爲對應的替換 。如果替換數組中的元素數少於模式數組中的 ,則任何額外的模式將被替換爲空的 字符串。

那麼基本上所說的是,你可以讓你的模式數組是你想要替換的所有單詞。然後你可以使用「夾克」這個詞作爲你的替代品,然後任何時候你的模式陣列中的一個單詞被發現,它將用夾克代替它。

你有問題得到這個工作?

+0

謝謝你告訴我這件事,正則表達式一直很難掌握,但它越來越清晰,它的功能非常強大,並且它是必不可少的。我不得不將這一個給予@summea,因爲他/她的回答是我需要的實際代碼。謝謝 – Ivar 2012-01-28 01:35:35

1

如何:

$pattern = array("/jacket/i","/jeans/i"); 
$replacement = array("jacket","jeans"); 
$string = 'Red jackets'; 

foreach ($pattern as $i => $p) { 
    if (preg_match($p, $string)) { 
     $replaced_string = $replacement[$i]; 
     break; 
    } 
} 

echo $replaced_string; 
+0

@summea:你沒看見'break'嗎?這正是OP在他的問題中所描述的,不是嗎? – zerkms 2012-01-27 23:36:28

+0

@summea:「我希望$ replacement_string只是」夾克「」---我的代碼就是這樣做的;-)如果這不是OP的意思 - 他需要開始更好地表達他的想法;-) – zerkms 2012-01-27 23:44:11

+0

謝謝評論...!你需要一個字就是對的。但是,使用foreach循環可能會減慢代碼,具體取決於模式和替換數組的大小。我不確定當PHP的preg_replace可以與模式和替換數組一起工作時,foreach是必要的......但是,通常有不止一種方法來執行...使用PHP。 – summea 2012-01-27 23:58:56