遇到问题,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);
有没有人知道为什么它只替换每行的第一个匹配?
答案 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