Php str_替换仅匹配第一个实例

Php str_替换仅匹配第一个实例,php,preg-match-all,str-replace,Php,Preg Match All,Str Replace,后续问题 鉴于以下POST数据: 2010-June-3 <remove>2010-June-3</remove> 2010-June-15 2010-June-16 2010-June-17 2010-June-3 2010-June-1 2010-6-3 2010年6月3日 2010年6月15日 2010年6月16日 2010年6月17日 2010年6月3日 2010年6月1日 我只想删除2010-June-3的第一个实例,但下面的代码将删除所有数据 $i = 1

后续问题

鉴于以下POST数据:

2010-June-3
<remove>2010-June-3</remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-3
2010-June-1
2010-6-3
2010年6月3日
2010年6月15日
2010年6月16日
2010年6月17日
2010年6月3日
2010年6月1日
我只想删除2010-June-3的第一个实例,但下面的代码将删除所有数据

$i = 1;
$pattern = "/<remove>(.*?)<\/remove>/";
preg_match_all($pattern, $_POST['exclude'], $matches, PREG_SET_ORDER);
    if (!empty($matches)) { 
        foreach ($matches as $match) {
            // replace first instance of excluded data
            $_POST['exclude'] = str_replace($match[1], "", $_POST['exclude'], $i);  
        }
   }

echo "<br /><br />".$_POST['exclude'];
$i=1;
$pattern=“/(**?/”;
preg_match_all($pattern,$_POST['exclude'],$matches,preg_SET_ORDER);
如果(!empty($matches)){
foreach($matches作为$match进行匹配){
//替换排除数据的第一个实例
$\u POST['exclude']=str\u replace($match[1],“”,$\u POST['exclude'],$i);
}
}
回显“

”;
这呼应了:

<remove></remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-1

2010年6月15日
2010年6月16日
2010年6月17日
2010年6月1日
它应反映:

<remove>2010-June-3</remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-3
2010-June-1
2010-6-3
2010年6月15日
2010年6月16日
2010年6月17日
2010年6月3日
2010年6月1日
您需要改用:

$_POST['exclude']后面的变量是
limit
变量,如上面的链接所示

date字段中不需要该函数,但由于它是一个变量,因此可能需要包含特殊的正则表达式字符。

您需要改用:

$_POST['exclude']后面的变量是
limit
变量,如上面的链接所示


日期字段中不需要该函数,但由于它是一个变量,可能需要包含特殊的正则表达式字符。

Kerry,您可能需要为
preg\u quote
提供
$delimiter
参数,以防万一。。。以及实际调用
preg\u replace
。很好,谢谢。我发现我没有用preg_replaceKerry替换代码很有趣/悲哀,您可能想为
preg_quote
提供
$delimiter
参数,以防万一。。。以及实际调用
preg\u replace
。很好,谢谢。我觉得我没有用preg_replace替换代码很有趣/悲哀
$_POST['exclude'] = preg_replace( '/' . preg_quote( $match[1], '/' ) . '/', "", $_POST['exclude'], 1, $i );