这是一个简单的
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
。
我一定错过了一些东西..
这真是一个混乱的正则表达式。您到底想实现什么目标?看起来如果 URL 不是以 http 或 https 开头,您想要添加域吗?如果是这样,那你就有点不对劲了:
$string = preg_replace('/src=(\'|")?(?!htts?:)/i', 'src="http://domain.com/');
应该更接近目标。
这个正则表达式有什么作用?它寻找:
src=
'
或 "
http:
或 https:
注意:
{?!...)
称为 负前瞻,是 零宽度断言 的一个示例。这里的“零宽度”意味着它不消耗任何输入。在这种情况下,它的意思是“后面没有......”。
你的正则表达式有什么作用?它寻找:
src=
'
或
"
字符
(http:|https:)
中的任何一个字符(这就是 [^...]
构造的含义)全部不区分大小写
[^(http:|https:)]
相当于:
[^():https]
表示任何不是
这些字符之一的字符。
[^(http:|https:)]
不正确。它匹配除
(
、h
、t
、p
、:
、|
、s
或 )
之外的任何字符。试试这个:我自己测试过