php:str_replace还是preg_match?

时间:2012-02-08 02:56:30

标签: php regex preg-replace str-replace

我正在尝试创建一个脚本,将所有相对路径转换为绝对路径

那么如何在html文本中找到并替换

的所有出现
src="/jsfile.js

src="http://mysite.com/jsfile.js

然后

src="../jsfile.js

src="http://mysite.com/jsfile.js

然后

src="js/jsfile.js

src="http://mysite.com/js/jsfile.js

也许更多的情况?当然还有href场景

更新

也许我的问题写得不好,但目标是将任何相对网址或相对链接替换为绝对网址...我不确定以下答案是否正常工作

4 个答案:

答案 0 :(得分:1)

使用preg_replace的单个正则表达式怎么样?它也适用于hrefsrc属性。请务必查看演示以查看它的实际效果!

这会正确转换所有上述测试用例:

$result = preg_replace( '/(src|href)="(?:\.\.\/|\/)?([^"]+)"/i', '$1="' . $url . '/$2"', $test);

Demo

答案 1 :(得分:0)

这不是一个很好的比较。这两个功能有不同的用途。我个人会按顺序使用三个:

  1. preg_match:找到需要修改的网址。
  2. substr:修改网址。
  3. str_replace:将旧网址替换为修改后的网址。

答案 2 :(得分:0)

如果超过3,请使用

$pathes=array(
  'src="/jsfile.js' => 'src="http://mysite.com/jsfile.js',
  'src="../jsfile.js' => 'src="http://mysite.com/jsfile.js',
  'src="js/jsfile.js' => 'src="http://mysite.com/js/jsfile.js'
);


$newhtml=str_replace(array_keys($pathes),$pathes,$oldhtml);

答案 3 :(得分:0)

<?php
$html = file_get_contents('index.html');
$html = preg_replace_callback('#"(\S+).js"#', "replace_url", $html);
function replace_url($url) {
return '"http://'.$_SERVER['HTTP_HOST'].chr(47).trim($url[1], '/,.').'.js"';
}
echo $html;

使用preg_replace_callback