首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >str_replace仅匹配第一个实例

str_replace仅匹配第一个实例
EN

Stack Overflow用户
提问于 2010-06-18 02:06:58
回答 1查看 2.5K关注 0票数 0

Get all text between tags with preg_match_all() or better function?的后续问题

给定以下POST数据:

代码语言:javascript
复制
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日的第一个实例,但是下面的代码删除了所有数据。

代码语言:javascript
复制
$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'];

这是一个回声:

代码语言:javascript
复制
<remove></remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-1

它应该回显:

代码语言:javascript
复制
<remove>2010-June-3</remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-3
2010-June-1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-18 02:09:31

您需要改用preg_replace()

代码语言:javascript
复制
$_POST['exclude'] = preg_replace( '/' . preg_quote( $match[1], '/' ) . '/', "", $_POST['exclude'], 1, $i );

$_POST‘’exclude‘后面的变量是一个limit变量,您可以在上面的链接中看到。

preg_quote()函数在日期字段中不是必需的,但因为它是一个变量,所以可能需要包含特殊的正则表达式字符。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3064312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档