4

我需要利用我的正则表达式捕获/匹配的内容。假设我想将连字符后的第一个字符大写,我的正则表达式将是这样的:

-(.)

我的替换字符串将是这样的:

-\U1

preg_replace,我会有这样的事情:

$string = preg_replace('/-(.)/', '-\1', $string);

但这不起作用preg_replace(而且我认为它不支持在反向引用中更改大小写)。建议?

4

2 回答 2

4

您可以像这样使用preg_replace_callback

  $string = preg_replace_callback(
           '#(?<=-)(.)#',
           create_function(
               '$matches',
               'return strtoupper($matches[1]);'
           ),
           $string
       );

或者,使用匿名函数(使用 PHP ver >= 5.3.0):

$string = preg_replace_callback( '#(?<=-)(.)#', function( $matches) {
    return strtoupper( $matches[1]);
}, $string);

现场演示:http: //ideone.com/IpoCvB

于 2013-03-26T19:32:35.867 回答
0

$string = preg_replace('/(?<=-)(.)/e', 'strtoupper("$1")', $string);

e修饰符

于 2013-03-26T19:33:12.603 回答