繁体   English   中英

简单的PHP preg_replace问题

[英]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:)]不正确。 它与(htp:|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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM