php - 用相对 URL 替换绝对 URL 的正则表达式
问题描述
如何编写将任何绝对 URL 转换为相对路径的正则表达式。例如:
src="http://www.test.localhost/sites/
会成为
src="/sites/"
域不是静态的。
我不能使用 parse_url (根据这个答案),因为它是一个更大的字符串的一部分,它也包含无 url 数据。
解决方案
我的猜测是,也许这个表达式或它的改进版本可能会在某种程度上起作用:
^\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可视化正则表达式:
推荐阅读
- spring-boot - Hikari - Spring Boot 忽略了 hikari 属性
- javascript - 如何使用 Vue/Element-UI 过滤表格
- c# - 根据对象的类型为给定对象提供特定的全局索引(C#)
- java - 类型安全的 Map 与其值的多种类型的合并;`不兼容的类型 java.lang.Object 不能转换为 capture#1 of ?`
- java - 在 SOAP Ui java 中附加多个 xml 文件
- sccm - 目前在任何服务器上都找不到该软件:sccm 问题
- php - 试图从 API 获取“非对象”的属性 - json_decode
- css - Ngbootstrap:如何在搜索输入下定位下拉菜单
- flutter - 在对话框内颤动 webview
- javascript - 运行 Javascript 函数同步