2010-01-27 108 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; 

試試這個:我測試它自己