2013-07-20 11 views
0

我想抓住一個大的CSS文件中的所有網址。正則表達式在10kB變量 - >來自服務器的空響應

我嘗試使用此正則表達式:

preg_match_all("/url\('(\\'|[^'])*'\)/m", $css, $matches); 

$css是一個10KB的變量,使用file_get_contents一個CSS文件中讀取。
$matches是一個空數組。

但是,這會導致chrome中出現(net::ERR_EMPTY_RESPONSE)錯誤:服務器不會發送任何數據。如果我在這行之前返回函數,一切正常。如果我返回該行下面的函數,我會得到一個空的響應。

它甚至不會發送我在該行之前輸出的數據,它會在幾秒內響應(空響應) - 遠不是30秒超時。

當我第一次使用這個正則表達式,並將輸出傳遞給上面的代碼時,它工作得很好。 preg_match_all("/@font-face{[^}]+}/m", $css, $matches);
那一行是在我意識到我需要其他網址之前 - 不僅是字體。

有沒有人有任何想法出了什麼問題?

更新: 難道是這個錯誤?
https://bugs.php.net/bug.php?id=62049
鏈接:
http://codepad.org/FmlJi8N9
和快速谷歌搜索後:
Warning: preg_match(): Internal pcre_fullinfo()

我該如何解決這個問題?

+1

嘗試匹配行,網址應不會流傳兩行。 –

+0

服務器日誌給你任何提示? – Orangepill

+0

在日誌中沒有找到任何東西。另外,'explode(PHP_EOL,$ subject);'和'foreach'沒有解決它。 –

回答

1

如果我理解正確的話,你想這樣做:用線

preg_match_all("/url\([^)]*\)/m", $css, $matches); 
+0

工作正常!你看到任何理由爲什麼我的蹩腳的正則表達式失敗? –

+0

嗯,我的是一個簡單的貪婪的表達,會根據需要閱讀,所以不會有超時的機會。不太清楚你的......你打算用'\\''做什麼? –

+0

允許路徑中的轉義引號。我注意到我們使用了「,」和沒有引號的組合,所以我修改了代碼以匹配它。你的正則表達式非常適合新代碼。 –