regex help, найдите первые 3 вхождения ключевого слова и str_ireplace контент - PullRequest
1 голос
/ 28 октября 2010

Учитывая блок текста, мне нужно проанализировать его на предмет наличия ключевого слова.Затем при первом появлении ключевого слова мне нужно обернуть вокруг него жирным шрифтом (если его еще нет), при втором появлении ключевого слова, курсивом, а в третьем подчеркнуть.

Пример использования ключевого слова " help ":

Это текст с ключевым словом "help".Если вы можете помочь, я действительно ценю это.Спасибо за помощь!Если есть еще вхождения ключевого слова help , я их проигнорирую.

Будет переписано, чтобы оно было ...

Это некоторый текст с ключевым словом" помощь ".Если вы можете помочь , я действительно ценю это.Спасибо за помощь !Если появятся еще ключевые слова help , я их проигнорирую.

1 Ответ

0 голосов
/ 28 октября 2010

Я предполагаю, что вам нужно решение на основе PHP, потому что вы упомянули str_ireplace.

Вы можете сделать это, используя preg_replace_callback .
Эта функцияаналогичен preg_replace, но вызывает пользовательскую функцию обратного вызова, возвращаемое значение которой будет использоваться для замены.

Чтобы отслеживать номер вхождения, я использовал переменную static в функции обратного вызова.

$keyword = 'help';

// the callback function
function fun($matches)
{
        static $count = 0;

        // switch on $count and later increment $count.
        switch($count++) {
                case 0: return '<b>'.$matches[1].'</b>';   // 1st time..use bold
                case 1: return '<em>'.$matches[1].'</em>'; 
                case 2: return '<u>'.$matches[1].'</u>';
                default: return $matches[1];              // don't change others.
        }
}

// search for keyword separated by word boundaries.
// if present call the callback function.
$text = preg_replace_callback("/\b($keyword)\b/","fun",$text);

Код в действии

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