PHP:正确的正则表达式使第一个冒号左边的每个字母都小写

发布于 2024-08-15 00:59:39 字数 365 浏览 5 评论 0原文

$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';
$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';

Right now I have:

$value = preg_replace('/(^.+)(?=:)/e', "strtolower('\\1')", $value);

this outputs

$value='x-cem-date:wed, 16 dec 2009 15:42:28 GMT';

it should output:

$value='x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT';

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

千鲤 2024-08-22 00:59:39

您的正则表达式应如下所示:

/(^.+?)(?=:)/

区别在于 +? 字符。 +? 是非贪婪的,这意味着它将找到最少数量的字符,直到表达式移至表达式中的下一个匹配项,而不是查找下一个匹配项之前的最多字符。

Your regular expression should be as follows:

/(^.+?)(?=:)/

The difference is the +? character. The +? is non-greedy, meaning that it will find the LEAST amount of characters until the expression moves onto the next match in the expression, instead of the MOST characters until the next match.

陈独秀 2024-08-22 00:59:39

您可以考虑使用 explode()implode() 而不是正则表达式。

$value_a = explode( ':', $value );
$value_a[0] = strtolower( $value_a[0] );
$value = implode( ':', $value_a );

You might consider using explode() and implode() instead of a regular expression.

$value_a = explode( ':', $value );
$value_a[0] = strtolower( $value_a[0] );
$value = implode( ':', $value_a );
暗喜 2024-08-22 00:59:39

至少尝试

preg_replace('/([\w-]+?)(:[\w\d\s\:\,]+)/e', "strtolower('\\1') . '\\2'", $value);

一下您发布的示例。

Try

preg_replace('/([\w-]+?)(:[\w\d\s\:\,]+)/e', "strtolower('\\1') . '\\2'", $value);

It works on the example you posted, at least.

旧时模样 2024-08-22 00:59:39
echo preg_replace('~^[^:]+~e', 'strtolower("$0")', $value);
echo preg_replace('~^[^:]+~e', 'strtolower("$0")', $value);
蓝色星空 2024-08-22 00:59:39

尝试使用匹配的正则表达式

$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";

? 在那里,所以正则表达式不会贪婪并抓取超出应有的内容。

Try your regular expression with a match

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_match('/(^.+)(?=:)/e', $value, $matches); 
print_r ($matches) . "\n";

This should output

Array
(
    [0] => x-Cem-Date:Wed, 16 Dec 2009 15:42
    [1] => x-Cem-Date:Wed, 16 Dec 2009 15:42
)   

Try this instead

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_replace('/(^.+?:)/e', "strtolower('\\1')", $value);   
echo $value . "\n";

The ? is in there so the regex isn't greedy and grabbing more than it should.

〆一缕阳光ご 2024-08-22 00:59:39

版本

$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);

仅供参考,这是使用 preg_replace_callback输出的

x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT

Just for information, this is the version using 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);

output

x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文