Php 如何停止仅替换部分文件名?

Php 如何停止仅替换部分文件名?,php,regex,str-replace,Php,Regex,Str Replace,我正在处理一个HTML文件,用新文件替换所有对外部文件的引用,但是,有时这会导致错误 例如:我想在此源代码中将style.css的所有实例替换为1.css,将iestyles.css的所有实例替换为2.css: <html> <link href="styles.css" /> <link href="iestyles.css" /> </html> 因此,当我运行第二个查询时,它不会更改iestyles.css引用,因为它不再存在。有办

我正在处理一个HTML文件,用新文件替换所有对外部文件的引用,但是,有时这会导致错误

例如:我想在此源代码中将
style.css
的所有实例替换为
1.css
,将
iestyles.css
的所有实例替换为
2.css

<html>
  <link href="styles.css" />
  <link href="iestyles.css" />
</html>
因此,当我运行第二个查询时,它不会更改
iestyles.css
引用,因为它不再存在。有办法解决这个问题吗?我想我可以发明一个复杂的正则表达式,但是有很多变量需要考虑,因为不是所有代码都是格式良好的。
干杯

只需更改顺序:首先将
iestyles.css
替换为
2.css
,然后将
style.css
替换为
1.css

如果您确定文件名是
href
-attribute中唯一的内容,那么还可以包含双引号


包括双引号(假设它们都使用双引号)应该可以工作

str_replace('"styles.css"', '"1.css"', $html);
使用preg_replace()


只需在替换内容中包含报价即可


“1.css”替换
“style.css”

您可以先更改'iestyles.css'

OP也可以代替ie1.css的second(第二个),问题是,我不能确定文件名到底是什么——这只是一个例子。那么,如果有大量的参考文献需要替换,我怎么知道该先做什么呢?我也不能确定是否使用了双引号或单引号,或者实际上是否使用了引号。正如我所说,并不是所有的代码都是格式良好的。“无引号”不仅是“格式不好”,而且是不完整的。作为旁注;)然而,像@cwallenpole一样,从大到小替换总是有用的。按长度对“from”-字符串进行排序是一个好的开始。嘿,你建议的,我只是1+'d。是的,这是一个好的开始,但不是一个解决方案。我说的是相当大的规模。可以替换数百个引用,文件名可以是任何内容。我需要一个可靠的方法来确保每一个都被正确地替换。是的,我不能确保它们总是双引号:\I不能确保链接的格式每次都是相同的。
$html = str_replace('"styles.css"', '"1.css"', $html);
$html = str_replace('"iestyles.css"', '"2.css"', $html);
str_replace('"styles.css"', '"1.css"', $html);
preg_replace('|<link href="styles\.css" />|', '1.css', $html);
str_replace('"styles.css', '"1.css', $html);