2011-05-05 14 views
0

我想用正則表達式來識別使用PHP的相對src路徑。要做到這一點,我的想法是使用前瞻(?=然後不是^和一個子表達式(http),但這不起作用。它適用於單個字符,但^不適用於子表達式。 & &操作還是什麼?除了子表達式

<img.*?src=[\'\"]\(?=^(http)) 

我需要它把整個HTTP或者IMGS與H,T或p起將針對受到損害。有什麼建議?這是任務太大了正則表達式?

回答

2

您可以使用負向預測,它是(?!...)而不是(?=...)。對於你的榜樣(我把在一開始的錨):

^(?!http) 

曰:字符串的開始,那麼一些東西,不是「HTTP」。

編輯:既然你有更全面的例子更新:

<img [^>]*src=['"](?!http)([^'"]+)['"] 

          ^------^ - this capturing group captures the link 
            which doesn't start with http 

當然,爲了正確解析你應該使用DOM)

+0

+1在這裏額外的工作。 – 2011-05-05 02:39:48

+0

非常感謝一噸。 – joel 2011-05-05 02:56:23

0

這不是最有用的答案,但它聽起來好像你已經達到了正則表達式在HTML解析中的應用限制。根據this answer here查看使用HTML DOM解析器。我沒有使用PHP DOM解析器,但是我知道在其他語言中,DOM解析器通常會讓HTML任務的工作時間爲30秒,而不是一小時或更長時間的怪異特例測試。

+1

我傾向於跳「不解析* ML與正則表達式「的行列,但在這種情況下,這個問題是真正獨立於HTML解析。這實際上是一個URL解析的問題。即使joel使用合適的解析器來提取URL,他仍然有相同的基本問題。 – 2011-05-05 02:42:47

+0

@Frank Farmer - 是的,你是對的,但如果你有一個解析器來獲取SRC屬性的值,你能不能在PHP中使用'StartsWith(「http://」)' – 2011-05-05 02:44:33