2016-06-14 4 views
0

文字列をpreg_replaceに置き換えるときに問題があります。PHP preg_replace multiple words

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

働いている - https://eval.in/588758 – splash58

+0

ああ、私の悪い。私は代わりに "We"とタイプし、大文字小文字を区別しないようにする方法は? –

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); 
}