PHP,正则表达式和大小写

时间:2013-03-26 19:27:05

标签: php regex preg-replace

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

-(.)

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

-\U1

preg_replace中,我会有这样的事情:

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

但这在preg_replace中不起作用(我认为它不支持在反向引用中更改案例)。建议?

2 个答案:

答案 0 :(得分:3)

您可以像这样使用preg_replace_callback

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

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

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

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

答案 1 :(得分:0)

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

e modifier