简单的PHP preg_replace问题

时间:2010-01-27 05:05:12

标签: php regex

这是一个简单的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

我必须在这里遗漏一些东西..

3 个答案:

答案 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:)]不正确。它匹配除(htp:|s或{{}之外的任何字符1}}。

答案 2 :(得分:0)

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

试试这个:我自己测试了