PHP обратное выражение в верхнем регистре (немецкие символы)

Я хочу найти текст после конкретный шаблон регулярных выражений (соответствие одному или двум словам, за которыми следуют точка и пробел). Тогда я использую 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>';

Помогает по достоинству.

1

Решение

Вы хотите использовать обратный вызов для достижения этого, как это предлагается в комментариях.

$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...
1

Другие решения

Привет это немного сложнее, но все еще легко. Используйте 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);

Это должно работать.

0

По вопросам рекламы [email protected]