为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过 RegEx-PHP 更改 HTML 字符串中的“基本 Url”

如何通过 RegEx-PHP 更改 HTML 字符串中的“基本 Url”

PHP
肥皂起泡泡 2023-08-26 15:56:26
我正在开发一个需要解析和操作 HTML 的项目。我需要替换 HTML 字符串中的“Base Url”。我正在尝试使用正则表达式来达到此目的。我尝试了多种模式,但没有运气。下面是我当前的代码 -<?php$html = '<html><head><base href="/" /></head><body></body></html>';$base = 'https://SOME_URL/';$output = preg_replace('/<base href="(.+)">/', $base, $html);print $output;电流输出 - $html = '<html><head><base href="/" /></head><body></body></html>';预期输出 - $html = '<html><head><base href="https://SOME_URL/" /></head><body></body></html>';
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您的正则表达式 - <base href="(.+)">, 不匹配,因为后面的部分"(.+)"是错误的。查看源字符串 -<base href="/" />看到了吗 ?和/?然后>_

这只是使用正则表达式解析 HTML 不是一个好主意的众多原因之一。即使没有那个空格,甚至可能没有那个,该元素也是完全有效的/

但是,如果您 100% 确信该元素的位置base不会变得太复杂(例如大量嵌套、属性之间的新行等)。你也许可以通过——/<base[ ]*?href=".+"/i

查看演示

在 PHP 中,为了获得预期的输出,你可以这样做-

$base = 'https://SOME_URL/';


$output = preg_replace('/(<base[ ]*?href=").+(")/', "$1$base$2", $html);


查看完整回答
反对 回复 2023-08-26
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

尝试这个模式

(?<=<base\s)href="(.*?)"

查看演示

  $html = '<html><head><base href="/" /></head><body></body></html>';

  $base = 'https://SOME_URL/';

  res=$html.replace(/(?<=base\s)href="([^"]*)"/,`"${$base}"`)

  console.log(res)


查看完整回答
反对 回复 2023-08-26
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信