您可以为此使用自定义回调,并且preg_replace_callback()
:
$blurb = preg_replace_callback("/([\*]{2,})/", function( $match) {
return str_repeat( "★", strlen( $match[1])); }
, $s['longDescription']);
输入字符串*****
,这将输出:
★★★★★
对于 PHP < 5.3,您将无法使用匿名函数,因此您必须将上述回调声明为独立函数。然而,如果你想变得超级酷,你可以修改你的正则表达式来使用断言,并找到一个星号之前或之后的所有星号,如下所示:
$s['longDescription'] = 'replace these ***** not this* and *** this ** ****';
$blurb = preg_replace("/(?:(?<=\*)|(?=\*\*))\*/", "★", $s['longDescription']);
正则表达式确保从当前位置,我们要么只看到一个星号,要么看到我们面前的两个星号。如果这些断言中的任何一个是正确的,我们就会尝试捕获一个星号。
这输出:
replace these ★★★★★ not this* and ★★★ this ★★ ★★★★