$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
现在我有:
$value = preg_replace('/(^.+)(?=:)/e', "strtolower('\\1')", $value);
此输出
$value='x-cem-date:wed, 16 dec 2009 15:42:28 GMT';
它应输出:
$value='x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT';
答案 0 :(得分:3)
您的正则表达式应如下所示:
/(^.+?)(?=:)/
区别在于+?
个字符。 +?
是非贪婪的,这意味着它将找到最少量的字符,直到表达式移动到表达式中的下一个匹配项,而不是MOST字符,直到下一个匹配。
答案 1 :(得分:2)
您可以考虑使用explode()
和implode()
代替正则表达式。
$value_a = explode( ':', $value );
$value_a[0] = strtolower( $value_a[0] );
$value = implode( ':', $value_a );
答案 2 :(得分:1)
尝试
preg_replace('/([\w-]+?)(:[\w\d\s\:\,]+)/e', "strtolower('\\1') . '\\2'", $value);
它适用于您发布的示例,至少。
答案 3 :(得分:1)
仅供参考,这是使用preg_replace_callback
$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
function callback($text){return(strtolower($text[0]));}
echo preg_replace_callback("/^([^:]+:)/","callback",$value);
输出
x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT
答案 4 :(得分:1)
echo preg_replace('~^[^:]+~e', 'strtolower("$0")', $value);
答案 5 :(得分:1)
尝试使用匹配的正则表达式
$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_match('/(^.+)(?=:)/e', $value, $matches);
print_r ($matches) . "\n";
这应输出
Array
(
[0] => x-Cem-Date:Wed, 16 Dec 2009 15:42
[1] => x-Cem-Date:Wed, 16 Dec 2009 15:42
)
试试这个
$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_replace('/(^.+?:)/e', "strtolower('\\1')", $value);
echo $value . "\n";
?
就在那里,所以正则表达式并不贪婪,而且抓得比它应该的要多。