正则表达式帮助,查找关键字的前3次出现和str_ireplace内容

时间:2010-10-28 18:06:17

标签: php regex string text-parsing

给定一个文本块,我需要为现有的关键字解析它。然后在关键字的第一次出现时,我需要在它周围包含粗体标签(如果它还没有它们),关键字的第二个外观,斜体,以及第三个,下划线。

使用关键字“帮助”的示例:

这是一些带有关键字“help”的文字。如果你能提供帮助,我真的很感激。谢谢您的帮助!如果关键字帮助出现更多,我会忽略它们。

将被重写为......

这是一些带有关键字“< b> help< / b>”的文字。如果你可以< em>帮助< / em>,我真的很感激。感谢< u>帮助< / u>!如果关键字帮助出现更多,我会忽略它们。

1 个答案:

答案 0 :(得分:0)

我假设您需要基于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);

Code In Action