Я хочу найти текст после конкретный шаблон регулярных выражений (соответствие одному или двум словам, за которыми следуют точка и пробел). Тогда я использую preg_replace
с обратной ссылкой. Можно ли сделать текст, содержащийся в обратная ссылка, чтобы получить верхний регистр?
$teaser = "Special markup. This is the remaining text..."$pattern = '/(^\w+\s\w+\.\s)|(^\w+\.\s)/i'; //match one or two words followed by dot and whitespace
$replacement = '<span style="color: red">'$0'. '</span>'; //$0 is the backreference
$text = preg_replace( $pattern, $replacement, $teaser );
Мой ожидаемый результат:
SPECIAL MARKUP. This is the remaining text...
Также пытались использовать, без какого-либо успеха:
$replacement = '<span style="color: red">' . strtoupper( '$0' ) . '</span>';
Помогает по достоинству.
Вы хотите использовать обратный вызов для достижения этого, как это предлагается в комментариях.
$str = "Special markup. This is the remaining text...";
$str = preg_replace_callback('~^\w+(?:\s\w+)?\.\s~',
function($m) {
return '<span style="color: red">'.strtoupper($m[0]).'</span>';
}, $str);
echo $str;
Выход
<span style="color: red">SPECIAL MARKUP. </span>This is the remaining text...
Привет это немного сложнее, но все еще легко. Используйте preg_replace_callback:
$text = preg_replace_callback('regex', function($m) {
return str_to_upper($m[1]);
}, $caption);
так что в вашем случае вы должны иметь возможность поставить:
$text = preg_replace_callback( $pattern , function ($m) {
return '<span style="color: red">' . strtoupper( $m[1] ) . '</span>';
}, $teaser);
Это должно работать.