我一直在使用以下网站来测试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
我以为是?是非贪婪的修饰语。这是怎么回事?
答案 0 :(得分:8)
您的非贪婪修饰符正在按预期工作。但preg_match
替换所有出现的(非贪婪)匹配与替换文本(在您的情况下为""
)。如果您只想替换第一个,则可以将1
作为可选的第四个参数(限制)传递给preg_replace
函数(PHP docs for preg_replace)。在您链接的网站上,可以通过在“标志”一词和“限制”一词之间的文本输入中键入1
来完成此操作。
答案 1 :(得分:0)
只是@Asaph解决方案的一个实际示例。在这个例子中,你不需要非贪婪,因为你可以指定一个计数。 用标记
替换第一次出现的@ $line=preg_replace('/@/','zzzzxxxzzz',$line,1);