首页 > 解决方案 > 用相对 URL 替换绝对 URL 的正则表达式

问题描述

如何编写将任何绝对 URL 转换为相对路径的正则表达式。例如:

src="http://www.test.localhost/sites/ 

会成为

src="/sites/"

域不是静态的。

我不能使用 parse_url (根据这个答案),因为它是一个更大的字符串的一部分,它也包含无 url 数据。

标签: phpregexpreg-replace

解决方案


我的猜测是,也许这个表达式或它的改进版本可能会在某种程度上起作用:

^\s*src=["']\s*https?:\/\/(?:[^\/]+)([^"']+?)\s*["']$

如果您想探索/简化/修改它,该表达式将在此演示的右上角面板中进行说明。


测试

$re = '/^\s*src=["\']\s*https?:\/\/(?:[^\/]+)([^"\']+?)\s*["\']$/m';
$str = 'src=" http://www.test.localhost/sites/  "
src=" https://www.test.localhost/sites/"
src=" http://test.localhost/sites/   "
  src="https://test.localhost/sites/   "
      src="https://localhost/sites/   "
src=\'https://localhost/   \'
src=\'http://www.test1.test2.test3.test4localhost/sites1/sites2/sites3/   \'';
$subst = 'src="$1"';

var_export(preg_replace($re, $subst, $str));

输出

src="/sites/"
src="/sites/"
src="/sites/"
src="/sites/"
src="/sites/"
src="/"
src="/sites1/sites2/sites3/"

正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读