preg_replace:忽略已经更换的部件

时间:2015-09-29 15:43:49

标签: php regex

我想用相应的输入字段替换日期模式字符串(intl扩展名)。

模式可以是:

dd.MM.yy
dd.MM.yyyy
M/d/yy
M/d/yyyy
dd/MM/y
dd/MM/yyyy

我的代码是:

$date_pattern = 'M/d/yy';

$search = array('/[d|dd]/', '/[M|MM]/', '/[y|yy|yyyy]/');
$replace = array(
'<input type="text" name="day" size="2" maxlength="2">',
'<input type="text" name="month" size="2" maxlength="2">',
'<input type="text" name="year" size="4" maxlength="4">');

print preg_replace($search, $replace, $date_pattern);

问题是,&#34; preg_replace&#34;匹配位置的第一个替换输入字段:

<input t[here because of the 'y' character]pe="text" ...>

有没有办法告诉preg_replace忽略已经更换的部分?

1 个答案:

答案 0 :(得分:2)

您的正则表达式看起来并不正确,因为[d|dd]仅匹配d或文字|

更好地使用正则表达式中的单词边界:

$search = array('/\bd{1,2}\b/', '/\bM{1,2}\b/', '/\b(?:y{1,2}|y{4})\b/i');
print preg_replace($search, $replace, $date_pattern);

<强>输出:

<input type="text" name="month" size="2" maxlength="2">/<input type="text" name="day" size="2" maxlength="2">/<input type="text" name="year" size="4" maxlength="4">