2010-08-24 14 views
0

我在here之前詢問過相同的問題,但現在我需要以另一種方式重點關注keywortd,然後纔是其他部分的單詞。例如,將有助於我認爲正則表達式如果它包含關鍵字,那麼它就會逐個對齊這個單詞

$str = "i like programming very much"; 
$key = "gram"; 

我需要得到像

$str = "i like <span class='first'>pro</span><span class='second'>gram</span><span class='firs'>ing</span>" 

why preg_replace("/([^\s]*?)(".preg_quote($key).")([^\s]*)/iu","<span class="first">$0</span><span class="second">$1</span><span class="first">$2</span>",$str); 
doesn't work? 

感謝

回答

1

有一些錯誤,第一組是$ 1而不是$ 0等等。你包埋」

這樣,而不是:

preg_replace("/([^\s]*?)(".preg_quote($key).")([^\s]*)/iu","<span class="first">$0</span><span class="second">$1</span><span class="first">$2</span>",$str); 

你要做的:。

preg_replace("/([^\s]*?)(".preg_quote($key).")([^\s]*)/iu","<span class='first'>$1</span><span class='second'>$2</span><span class='first'>$3</span>",$str); 
+0

固定感謝很多,但爲什麼在某些情況下,從0開始,另一次從1? – Simon 2010-08-24 11:47:14

+0

據我所知,$ 0意味着整個模式匹配。但我不確定這是真正的每個正則表達式的味道。 – Toto 2010-08-24 12:00:13

1

你在PHP,所以考慮像:

$words = explode(' ', "quick brown fox"); 
$out = array_map(process, $words); 
return join(' ', $out); 

,並定義

function process($word) { 
    $p = strpos($word, 'gram'); 
    if ($p === FALSE) return $word; 
    /// take apart pieces with substr and friends, reformat in HTML, and return them 
    $left = substr($word, 0, $p); 
    $match = substr($word, $p, strlen('gram')); 
    $right = substr($word, $p+strlen('gram')); 
    return some_function_of($left, $match, $right); 
} 

再努力一點,但你想要做什麼。

相關問題