2010-08-24 2 views
0

. Я задал тот же вопрос до here, но теперь мне нужно прожечь keywortd по-другому, затем другую часть слова. пример будет полезно я думаюregex, чтобы подчеркнуть слово по частям, если оно содержит ключевое слово

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

мне нужно, чтобы получить что-то вроде программMing

$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

+0

Насколько я знаю, $ 0 означает полное соответствие шаблону. Но я не уверен, что это верно для каждого аромата регулярного выражения. – Toto

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

немного больше усилий, но это не то, что вы хотите.