【发布时间】:2014-05-08 13:09:14
【问题描述】:
我需要搜索一些内容并用 HTML 将某些单词括起来。要搜索的单词在一个数组中,我只想替换每组匹配项的第二次到最后一次出现。因此,例如,如果有 5 个匹配项,我想替换第 4 个匹配项。如果有 3 个匹配项,则替换第 2 个匹配项。如果有 2 个匹配项,则替换第 2 个/最后一个匹配项,如果只有一个匹配项,则使用该匹配项。
回调函数在使用回调函数的外部。
我想我需要一个数组计数 - 减一 - 然后将该数字传递给回调函数并在那里使用它,但也许有更简单的方法来做到这一点?
简化函数为:
function repWords($content) {
foreach ($words_array as $w) {
$content = preg_replace_callback('/\b('.$w.'[s]?)\b/S', array(&$this,'addHtml'), $content);
}
return $content;
}
function addHtml($format){
return '<span>' . $format[1] . '</span>'
}
这可以根据需要替换它找到的所有单词,我可以将其设置为随机替换一些,但我想任一替换第n个 次出现和/或仅替换 一次次出现(并不总是第一次出现)。
【问题讨论】:
-
最后一段有点让我失望,似乎与您之前的陈述不符..您能给出一个实际的“之前”和“之后”的例子吗?
-
所以你不希望这个方法正确:查找数组中的所有单词匹配,将
count-1传递给回调函数? -
还有,你用的是什么版本的php
标签: php regex replace preg-replace-callback