将 src 属性值从相对 URL 替换为绝对 URL

问题描述 投票:0回答:3

这是一个简单的

preg_replace()
调用:

$string = 'src="index.php';
$string = preg_replace("/(src=('|\")+[^(http:|https:)])/i", "src=\"http://example.com/", $string);
echo $string;

我期望结果是

src="http://example.com/index.php
,但结果却是
src="http://example.com/ndex.php

我一定错过了一些东西..

php regex html-parsing src absolute-path
3个回答
5
投票

这真是一个混乱的正则表达式。您到底想实现什么目标?看起来如果 URL 不是以 http 或 https 开头,您想要添加域吗?如果是这样,那你就有点不对劲了:

$string = preg_replace('/src=(\'|")?(?!htts?:)/i', 'src="http://domain.com/');

应该更接近目标。

这个正则表达式有什么作用?它寻找:

  • src=
  • 可选后跟
    '
    "
  • not 后跟
    http:
    https:
  • 全部完成,不区分大小写

注意:

{?!...)
称为 负前瞻,是 零宽度断言 的一个示例。这里的“零宽度”意味着它不消耗任何输入。在这种情况下,它的意思是“后面没有......”。

你的正则表达式有什么作用?它寻找:

  • src=
  • 一个或多个 '
    "
    字符
  • 不是
  • 任何 (http:|https:) 中的任何一个字符(这就是
    [^...]
    构造的含义)
    全部不区分大小写
注:

[^(http:|https:)]

相当于:

[^():https]

表示任何
不是

这些字符之一的字符。


0
投票
[^(http:|https:)]

不正确。它匹配除

(
h
t
p
:
|
s
)
之外的任何字符。
    


0
投票
试试这个:我自己测试过

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.