Php 如何使用正则表达式转换此值

Php 如何使用正则表达式转换此值,php,regex,preg-replace,Php,Regex,Preg Replace,作为正则表达式的新手,我有一个问题,我不知道如何解决这个问题 $string = '15Mar2009(sun)'; $pattern = '/((\d+){1,2})((\w+){3})((\d+){4})((w+){3})/i'; $replacement = '${1} ${2} ${3} '; echo "\n"; echo preg_replace($pattern, $replacement, $string); echo "\n"; 我需要这种格式的输出2009年3月15日sun

作为正则表达式的新手,我有一个问题,我不知道如何解决这个问题

$string = '15Mar2009(sun)';
$pattern = '/((\d+){1,2})((\w+){3})((\d+){4})((w+){3})/i';
$replacement = '${1} ${2} ${3} ';
echo "\n";
echo preg_replace($pattern, $replacement, $string);
echo "\n";

我需要这种格式的输出
2009年3月15日sun

您已经在使用
+
修饰符,然后您正在使用量词
{}
,这根本没有意义

您需要删除
+
并用反斜杠转义
,以逐字匹配它们

因此,使用这个正则表达式:

(\d{1,2})(\w{3})(\d{4})\(\w{3}\)
并将其替换为:

$1 $2 $3 $4    

删除额外的
+
,并在最后一部分中为匹配括号而转义:

$pattern = '/(\d{1,2})(\w{3})(\d{4})\((w{3})\)/';

您可以使用下面的正则表达式

^(\d{2})([A-Za-z]{3})(\d{4})\(([^)]*)\)$
替换

$1 $2 $3 $4

PHP代码应该是

<?php
$string = '15Mar2009(sun)';
$pattern = '~^(\d{2})([A-Za-z]{3})(\d{4})\(([^)]*)\)$~';
$replacement = '$1 $2 $3 $4';
echo preg_replace($pattern, $replacement, $string);
?> //=> 15 Mar 2009 sun
2009年3月15日星期日
谢谢@Avinash,你节省了我的时间,也教会了我。