preg_replace_callback只替换第一次出现的内容


preg_replace_callback replaces just first occurrence

我有一个正则表达式来查找所有百分比为(100|''d|''d)''%的数字-这个正则表达式是给定的,我不允许更改它。我有输入字符串:

Lorem ipsum 10% dolor, 8%sit amet 50%

然后我需要根据正则表达式高亮显示(使用HTML标记)字符串的部分,这样我就可以得到

Lorem ipsum <i>10%</i> dolor, <i>8%</i>sit amet <i>50%</i> 

因为preg_replace只适用于类似regex的(100%|''d''d%|''d%),否则它只会突出显示数字0-100。我使用的preg_replace_callback如下:

<?php
    $string = "Lorem ipsum 10% dolor, 8%sit amet 50%";
      $count = 0;
        function foo($matches){
            global $count;
            return "<i>".$matches[$count++]."</i>";
        }
        $reg = "/(100|'d'd|'d)'%/";
        $str_out = preg_replace_callback($reg, "foo", $string, PREG_PATTERN_ORDER);
?>

输出是这样的:

Lorem ipsum <i>10%</i> dolor, 8%sit amet 50%

只替换第一个出现的项。

您也可以使用preg_replace

$reg = '/(100|'d'd|'d)%/';
$repl = preg_replace( $reg, '<i>$0</i>', $input);

RegEx演示