preg_replace仅替换第一次出现,然后跳到下一行

时间:2010-06-06 16:23:16

标签: php regex preg-replace

遇到问题,preg_replace只替换它找到的第一个匹配项,然后跳转到下一行并跳过我想要替换的同一行上的其余部分。

我所做的是我读取了一个CSS文件,该文件有时在一行中有多个“url(media / pic.gif)”并替换“media / pic.gif”(该文件随后将保存为副本更换零件)。 CSS文件的内容放入变量$ resource_content:

$resource_content = preg_replace('#(url\((\'|")?)(.*)((\'|")?\))#i', '${1}'.url::base(FALSE).'${3}'.'${4}', $resource_content);

有没有人知道为什么它只替换每行的第一个匹配?

2 个答案:

答案 0 :(得分:4)

尝试:

$resource_content = preg_replace('#(url\((\'|")?)(.*?)((\'|")?\))#i', '${1}'.url::base(FALSE).'${3}'.'${4}', $resource_content);

这会使(.*)字词与“太多”内容保持匹配。

答案 1 :(得分:0)

举个例子 - 如果你的$变量是:

STARTING 
FIRSTT AAA 
SECONDD AAA

1)如果你实现这个功能:

$variable = preg_replace('/STARTING(.*)AAA/', 'REPLACING_STRING', $variable);

它会改变所有内容(从STARTING到最新的AAA),结果是:

REPLACING_STRING

2)如果您使用:

$variable = preg_replace('/STARTING(.*?)AAA/', 'REPLACED_STRING', $variable);

结果是:

REPLACING_STRING 
SECOND AAA