2016-06-14 57 views
0

我用preg_replace替換字符串時出現問題。PHP preg_replace多個單詞

function addClass($search, $string) { 

    return preg_replace("/\b($search)\b/", "<div class=mark>$1</div>", $string); 

} 

$string = "We won again"; 
$result = addClass("We", $string); 

output ---> <div class=mark>We</div> won again 

我想爲多個字符串製作$search

$string = "We won again"; 
$result = addClass(array("We", "again"), $string); 

output ---> <div class=mark>We</div> won <div class=mark>again</div> 

如何實現多個搜索字符串放入數組?

在此先感謝...

回答

2

您可以使用or expresion在正則表達式 - (We|again)

function addClass($search, $string) { 
    return preg_replace("/\b(". implode('|', $search) . ")\b/", "<div class=mark>$1</div>", $string); 
} 

而且,如果要保存舊的語法,從一個字符串使一個數組:

function addClass($search, $string) { 
    if(! is_array($search)) $search = array($search); 
    return preg_replace("/\b(". implode('|', $search) . ")\b/", "<div class=mark>$1</div>", $string); 
} 

demo

+0

如何使用它?數組(「我們」,「贏」)不工作 –

+0

working-working - https://eval.in/588758 – splash58

+0

啊,我的壞。我輸入「我們」而不是「我們」,如何使其不區分大小寫? –

2

使用is_arrayarray_map功能的替代解決方案:

function addClass($search, $string) { 
    $search = (is_array($search))? array_map(function($v) { return "/\b($v)\b/"; }, $search) : ["/\b($search)\b/"]; 
    return preg_replace($search, "<div class=mark>$1</div>", $string); 
}