[英]simple PHP preg_replace question
这是一个简单的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
。
我一定在这里想念什么。
那真是一团糟的正则表达式。 您到底想达到什么目标? 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
或)
以外的任何字符匹配。
$string = 'src="index.php'; $string = preg_replace("/src=('|\")?(?!htts?:)/i", "src=\"http://domain.com/", $string); echo $string;
试试这个:我自己测试了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.