7

我一直在使用以下站点来测试 PHP 正则表达式,因此我不必不断上传: http ://www.spaweditor.com/scripts/regex/index.php

我正在使用以下正则表达式:

/(.*?)\.{3}/

在以下字符串上(替换为空):

Non-important data...important data...more important data

并且 preg_replace 正在返回:

more important data

但我希望它会返回:

important data...more important data

我以为?是非贪婪修饰符。这里发生了什么?

4

2 回答 2

10

您的非贪婪修饰符按预期工作。但是用替换文本(在您的情况下)preg_match替换所有出现的(非贪婪)匹配。""如果您只想替换第一个,您可以1作为可选的第四个参数(limit)传递给preg_replace函数(preg_replace 的 PHP 文档)。在您链接的网站上,这可以通过1在“标志”一词和“限制”一词之间输入文本来完成。

于 2009-12-14T06:13:00.173 回答
0

只是@Asaph 解决方案的一个实际示例。在此示例中,您不需要非贪婪,因为您可以指定计数。用标记替换一行中第一次出现的@

 $line=preg_replace('/@/','zzzzxxxzzz',$line,1);
于 2014-10-27T10:28:18.430 回答