function getSrc($content) {
$pattern = '<(?:content|src)="((?:https?://\d+\.media\.tumblr\.com)/(?:\w+)/(?:tumblr_[^_]+_(?:1280|500|400|250)\.(?:png|jpg|gif)))">i';
preg_match($pattern, $content, $matches);
return $matches[1];
}
內容順序如下:如何使正則表達式「更喜歡」某些東西?
...500.jpg...
...1280.jpg...
...400.jpg...
的$匹配[1]將是500,因爲500 1280前露面,但我想1280當有一個。
是否有可能使正則表達式更喜歡返回更大的數字?
最後,我改變我的代碼爲拯救生命:
function getSrc($content) {
$pattern = '<(?:content|src)="((?:https?://\d+\.media\.tumblr\.com)/(?:\w+)/(?:tumblr_[^_]+_(1280|500|400|250)\.(?:png|jpg|gif)))">i';
preg_match_all($pattern, $content, $matches);
array_multisort($matches[2], SORT_DESC, $matches[1]);
return $matches[1][0];
}
由於你所有的變化都是常量表達式,所以你不需要一個正則表達式。使用字符串函數來查找您正在查找的內容/優先級。如果使用正則表達式處理它的速度較慢,並且您會發現無法添加其他每個交替常見的分解子表達式,則渲染正則表達式最終將毫無用處。 – sln
@sln感謝您的評論,我正在爲url提取進行編碼,並且這只是比較簡單的代碼。 – igonejack
正如我之前所說,我沒有看到任何正常表達的可變性允許,通常是不可能的。這是因爲正則表達式_Alternation_是正則表達式中唯一可用的_Prefer_。因爲你的表達式需要錨定'tumblr _ [^ _] + _(1280 | 500 | 400 | 250)\。(?: png | jpg | gif)))「>'來定位文件名, – sln