这是一个简单的preg_replace
$string = 'src="index.php';
$string = preg_replace("/(src=('|\")+[^(http:|https:)])/i", "src=\"http://domain.com/", $string);
echo $string;
我希望结果为src="http://domain.com/index.php
,但结果是src="http://domain.com/ndex.php
。
我必须在这里遗漏一些东西..
答案 0 :(得分:5)
这是一个非常混乱的正则表达式。你想要完成什么?看起来如果URL不以http或https开头,您想要添加域吗?如果是这样,那你就有点不对了:
$string = preg_replace('/src=(\'|")?(?!htts?:)/i', 'src="http://domain.com/');
应该更贴近商标。
这个正则表达式做了什么?它寻找:
src=
'
或"
http:
或https:
注意: {?!...)
被称为否定前瞻,是zero-width assertion的一个示例。这里的“零宽度”意味着它不消耗任何输入。在这种情况下,它意味着“没有跟着......”。
你的正则表达式做什么?它寻找:
src=
'
或"
个字符(http:|https:)
中的任何一个字符([^...]
构造意味着什么)注意:强>
[^(http:|https:)]
相当于:
[^():https]
表示任何不其中一个字符的字符。
答案 1 :(得分:0)
构造[^(http:|https:)]
不正确。它匹配除(
,h
,t
,p
,:
,|
,s
或{{}之外的任何字符1}}。
答案 2 :(得分:0)
$string = 'src="index.php'; $string = preg_replace("/src=('|\")?(?!htts?:)/i", "src=\"http://domain.com/", $string); echo $string;
试试这个:我自己测试了