我正在开发一个需要解析和操作 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);
慕码人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)
- 2 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消