2010-01-27 111 views
1

这里有一个简单的preg_replace简单的PHP的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

我必须在这里丢失的东西..

回答

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] 

意味着是这些字符之一任何字符。

+0

只是一些轻微的,单引号将需要转义 – Scuzzy 2010-01-27 05:16:47

+0

@Scuzzy:固定的感谢。 – cletus 2010-01-27 05:17:32

0

将构建[^(http:|https:)]不正确。它匹配除(,h,t,p,:,|, s)以外的任何字符。

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

试试这个:我测试它自己