我想用正則表達式來識別使用PHP的相對src路徑。要做到這一點,我的想法是使用前瞻(?=然後不是^和一個子表達式(http),但這不起作用。它適用於單個字符,但^不適用於子表達式。 & &操作還是什麼?除了子表達式
<img.*?src=[\'\"]\(?=^(http))
我需要它把整個HTTP或者IMGS與H,T或p起將針對受到損害。有什麼建議?這是任務太大了正則表達式?
我想用正則表達式來識別使用PHP的相對src路徑。要做到這一點,我的想法是使用前瞻(?=然後不是^和一個子表達式(http),但這不起作用。它適用於單個字符,但^不適用於子表達式。 & &操作還是什麼?除了子表達式
<img.*?src=[\'\"]\(?=^(http))
我需要它把整個HTTP或者IMGS與H,T或p起將針對受到損害。有什麼建議?這是任務太大了正則表達式?
您可以使用負向預測,它是(?!...)
而不是(?=...)
。對於你的榜樣(我把在一開始的錨):
^(?!http)
曰:字符串的開始,那麼一些東西,不是「HTTP」。
編輯:既然你有更全面的例子更新:
<img [^>]*src=['"](?!http)([^'"]+)['"]
^------^ - this capturing group captures the link
which doesn't start with http
當然,爲了正確解析你應該使用DOM)
這不是最有用的答案,但它聽起來好像你已經達到了正則表達式在HTML解析中的應用限制。根據this answer here查看使用HTML DOM解析器。我沒有使用PHP DOM解析器,但是我知道在其他語言中,DOM解析器通常會讓HTML任務的工作時間爲30秒,而不是一小時或更長時間的怪異特例測試。
我傾向於跳「不解析* ML與正則表達式「的行列,但在這種情況下,這個問題是真正獨立於HTML解析。這實際上是一個URL解析的問題。即使joel使用合適的解析器來提取URL,他仍然有相同的基本問題。 – 2011-05-05 02:42:47
@Frank Farmer - 是的,你是對的,但如果你有一個解析器來獲取SRC屬性的值,你能不能在PHP中使用'StartsWith(「http://」)' – 2011-05-05 02:44:33
+1在這裏額外的工作。 – 2011-05-05 02:39:48
非常感謝一噸。 – joel 2011-05-05 02:56:23