Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更换前:忽略已更换的零件_Php_Regex - Fatal编程技术网

Php 更换前:忽略已更换的零件

Php 更换前:忽略已更换的零件,php,regex,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" max

我想用相应的输入字段替换日期模式字符串(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);
$date_模式='M/d/yy';
$search=array('/[d | dd]/'、'/[M | MM]/'、'/[y | yy | yyyy]/');
$replace=数组(
'',
'',
'');
打印preg_替换($search,$replace,$date_模式);
问题是,“preg_replace”已匹配位置处第一个替换的输入字段:

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


有没有办法告诉preg_replace忽略已替换的部件?

您的正则表达式似乎不正确,因为
[d|dd]
只匹配
d
或literal

最好在正则表达式中使用单词边界,如下所示:

$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);
输出:


/

请参阅。老实说,只生成一个正则表达式并同时替换所有部分比较容易,但我认为您的具体问题的答案是您不能。
y{1,4}
也匹配
yyy
。顺便说一句:您的模式导致:
/
。再次检查单词边界。谢谢@Gumbo,是的,ioseb的编辑中有一个问题。现在更正了。