これと にカスタム コールバックを使用できますpreg_replace_callback()
。
$blurb = preg_replace_callback("/([\*]{2,})/", function( $match) {
return str_repeat( "★", strlen( $match[1])); }
, $s['longDescription']);
の入力文字列を使用すると*****
、次のように出力されます。
★★★★★
PHP < 5.3 では無名関数を使用できないため、上記のコールバックをスタンドアロン関数として宣言する必要があります。ただし、超超クールになりたい場合は、正規表現を変更してアサーションを使用し、次のように 1 つのアスタリスクの前後にあるすべてのアスタリスクを見つけることができます。
$s['longDescription'] = 'replace these ***** not this* and *** this ** ****';
$blurb = preg_replace("/(?:(?<=\*)|(?=\*\*))\*/", "★", $s['longDescription']);
正規表現は、現在の位置から、アスタリスクを見ただけか、前に 2 つのアスタリスクを見たかを確認します。これらの主張のいずれかが真である場合、アスタリスクを 1 つ取得しようとします。
これは出力します:
replace these ★★★★★ not this* and ★★★ this ★★ ★★★★