这可以用正则表达式完成吗?
实施例
的x示例-HEADER:测试 变 的x例如报头:测试
的y例如:testoneTWOthree 变 的y例如:testoneTWOthree
答案 0 :(得分:4)
$output = preg_replace_callback('![a-zA-Z]+:!', 'to_lower', $input);
function to_lower($matches) {
return strtolower($matches[0]);
}
除非在特定情况下,否则您无法使用正则表达式进行大小写转换(例如,将'A'替换为'a'是可能的)。
编辑:好的,你每天都学到新的东西。你可以这样做:
$output = preg_replace('![a-zA-Z]+:!e', "strtoupper('\\1')", $input);
e (PREG_REPLACE_EVAL)
如果设置了此修改器, preg_replace()表现正常 替代反向引用 替换字符串,将其评估为 PHP代码,并使用结果 替换搜索字符串。单 引号,双引号,反斜杠() 和NULL字符将被转义 替换中的反斜杠 向引用。
只有preg_replace()使用此功能 改性剂;其他PCRE会忽略它 功能
然而,我会回避eval()字符串,特别是当与用户输入结合使用时,它可能是非常危险的做法。我希望preg_replace_callback()
方法作为一般规则。
答案 1 :(得分:3)
答案 2 :(得分:3)
当给予e
modifier时,可以在正则表达式模式上使用preg_replace
(请查看该页面上的示例#4),以便在替换时调用PHP代码: / p>
$string = "x-example-HEADER:teSt";
$new_string = preg_replace('/(^.+)(?=:)/e', "strtolower('\\1')", $string);
// => x-example-header:teSt
模式将在第一个冒号之前抓取所有内容到第一个反向引用,然后用strtolower
函数替换它。
答案 3 :(得分:2)
$str = 'y-exaMPLE:testoneTWOthree';
function lower( $str ) {
return strtolower( $str[1] );
}
echo preg_replace_callback( '~^([^:]+)~', 'lower', $str );