регулярное выражение, чтобы выделить слово по частям, если оно содержит ключевое слово - PullRequest
0 голосов
/ 24 августа 2010

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

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

мне нужно получить что-то вроде pro грамм мин

$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?

Спасибо

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Есть некоторые ошибки, первая группа $ 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);
1 голос
/ 24 августа 2010

Вы находитесь в 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);
}

Немного больше усилий, но он делает то, что ты хочешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...