正则表达式用根相对链接替换相对链接

2024-01-12

我有一串文本,其中包含具有所有不同类型链接(相对、绝对、根相对)的 html。我需要一个可以由 PHP 执行的正则表达式preg_replace将所有相对链接替换为根相对链接,而不触及任何其他链接。我已经有了根路径。

替换后的链接:

<tag ... href="path/to_file.ext" ... >   --->   <tag ... href="/basepath/path/to_file.ext" ... >
<tag ... href="path/to_file.ext" ... />   --->   <tag ... href="/basepath/path/to_file.ext" ... />

未触及的链接:

<tag ... href="/any/path" ... >
<tag ... href="/any/path" ... />
<tag ... href="protocol://domain.com/any/path" ... >
<tag ... href="protocol://domain.com/any/path" ... />

如果您只想更改基本 URI,您可以尝试BASE element http://www.w3.org/TR/html4/struct/links.html#edef-BASE:

<base href="/basepath/">

但请注意,更改基本 URI 会影响all相对 URI 而不仅仅是相对 URI 路径。

否则,如果您确实想使用正则表达式,请考虑您想要的相对路径必须是以下类型路径方案 (see RFC 3986 https://www.rfc-editor.org/rfc/rfc3986):

path-noscheme = segment-nz-nc *( "/" segment )
segment       = *pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                ; non-zero-length segment without any colon ":"
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
pct-encoded   = "%" HEXDIG HEXDIG
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

因此 URI 的开头必须匹配:

^([a-zA-Z0-9-._~!$&'()*+,;=@]|%[0-9a-fA-F]{2})+($|/)

但是请使用适当的 HTML 解析器来解析 HTML 并从中构建 DOM。然后你可以查询 DOM 来获取href属性并使用上面的正则表达式测试值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式用根相对链接替换相对链接 的相关文章

  • SQL:在行中保留计数或从数据库中选择计数

    示例 我有 2 张桌子 类别 Posts 在这样的类别中保留帖子编号是一个好方法吗 类别 id title posts 1 golf 50 2 soccer 90 posts id title category id 1 news 1 1
  • octobercms 任务调度不起作用

    我正在使用基于 Laravel 的 OctoberCMS 我没有 SSH 访问我的服务器的权限 每天我需要删除一些注册后 24 小时内未激活帐户的用户 所以我正在考虑使用任务调度 如 cronjobs 根据 10 月 CMSdocs htt
  • VB 脚本 Documents.Open 抛出 424 错误

    所以我有一个vbs脚本 Function test2open sSourceFile sPDFFile Dim wApp As Word Application Dim wDoc As Word Document logStream wri
  • REGEX (javascript) - 允许字母数字字符和不在第一个位置的特殊字符

    我想设计一个正则表达式 允许使用字母数字字符以及其他字符 只要它们不在第一个位置即可 例子 VALID Test VALID Hello123 VALID 456 Hi VALID 456 789 VALID Hi 777 VALID 33
  • 类别树的路由

    我正在使用Tree http www gediminasm org article tree nestedset behavior extension for doctrine 2类别树的学说扩展并希望有如下路线 cat subcat1 s
  • 如果我们的应用程序位于反向代理后面,如何获取访问者的真实 IP?

    我正在使用 Siteground 的基于 nginx 的动态缓存反向代理 它使用它来服务请求和静态文件 我想获取访问者的 IP 地址 但我无法获取任何内容 甚至没有显示任何内容print r SERVER 这是我尝试过的 hostname
  • 当控制器类扩展父控制器时,为什么我们仍然需要父构造函数?

    我是 CodeIgniter 和 OOP 的初学者 我正在读一页 CI 教程here http ellislab com codeigniter user guide tutorial news section html 我发现了一些让我产
  • 使用 swiftmailer 向多个收件人发送电子邮件

    我正在尝试在我的项目中使用 swiftmailer 以便我可以向多个用户发送 html 新闻通讯 我已经彻底搜索过 但我得到的一切从未对我有用 我想在表单输入字段中粘贴多个收件人 以逗号分隔 然后将 html 电子邮件发送给他们 我将收件人
  • 如何使用具有比较标准的 findBy 方法

    我需要使用使用比较标准 不仅仅是精确标准 的 神奇查找器 findBy 方法 换句话说 我需要做这样的事情 result purchases repository gt findBy array prize gt gt 200 这样我就可以
  • 如何从表中选择所有偶数 id?

    我想从 MySQL 数据库的表中选择所有甚至帖子 ID 然后显示它们 我还想获取所有带有奇怪 id 的帖子并将它们显示在其他地方 我想使用 PHP 来完成此操作 因为这是我使用的服务器端语言 或者 我是否必须选择所有帖子 然后使用 Java
  • PHP 继承以及静态方法和属性

    PHP 中的静态属性和方法不能被继承吗 一些例子会有所帮助 不 那不是真的 静态方法和属性 http www php net manual en language oop5 static php将会得到遗传 http www php net
  • dompdf:找不到图像或类型未知

    这是我的代码 我几乎尝试了所有在 PDF 上显示图像的方法 但仍然不起作用 你能帮我解决这个问题吗 我还将 DOMPDF ENABLE REMOTE 设置为 true 结果仍然相同 require once dompdf autoload
  • CodeIgniter 路由问题以访问前端和后端文件夹

    我正在使用 CodeIgniter 我在控制器和视图中有前端和后端文件夹 我尝试了服务器步骤甚至检查了几乎所有解决方案 但我仍然无法访问它我的默认控制器 路线 php route default controller frontend Us
  • 提交前验证表单(比检查空字段更复杂)

    我有一个包含时间输入的表单 具体来说 开放时间和结束时间 当按下提交按钮时 它会转到一个 php 页面 其中这些输入将添加到数据库中 在允许提交表单之前我想检查一些事情 例如 我想确保开始时间早于 小于 结束时间 这是表格 Opens
  • 在Python中删除带有重音符号的字符串中的所有非字母字符

    我正在尝试使用 Python 3 7 从包含重音符号的字符串中删除所有非字母字符 空格除外 我尝试了以下方法 import re text 29 1981 4 2008 clean text re sub W d text print cl
  • 依赖注入容器什么时候会变得太大,我该怎么办?

    我们都知道为什么依赖注入很棒因为它使代码耦合更少 更容易测试 并且更容易阅读 然后有些人决定使用依赖注入容器 like pimple http pimple sensiolabs org PHP 可以协助依赖倒置 http en wikip
  • Python正则表达式从字符串中获取浮点数

    我正在使用正则表达式来解析字符串中的浮点数 re findall a zA Z d d t 是我使用的代码 这段代码有问题 如果数字和任何字符之间没有空格 则不会解析该数字 例如 0 1 2 3 4 5 6 7 8 9 的预期输出为 0 1
  • MySQL 的 TEXT 类型的 Oracle 等效项

    Oracle 是否有与 MySQL 等效的列类型TEXT type 如果不是 那么通常如何存储较大的文本块 BLOB varchar 32767 如果重要的话 它是通过 PHP 访问 Oracle 10 历史背景是非常受欢迎的 Oracle
  • 如何使用 Mockery 在第 N 次调用模拟方法时抛出异常

    我需要测试我编写的某些代码多次调用另一个类上的方法时的行为 其中一次调用将导致抛出异常 我在用Mockery http docs mockery io模拟可能引发异常的类 因此 就我而言 该方法将被调用三次 我需要它在第二次抛出异常 这是我
  • 正则表达式 - 匹配单词缩写

    我正在考虑提供以下正则表达式作为答案这个问题 https stackoverflow com questions 2110010 how to find wordpresss installed on domain or server pr

随机推荐