[英]Confusion with preg_match
這可能是非常容易的問題......
我真的不知道如何使用模式搜索( preg_match
),我面臨着包含它的代碼......
if (preg_match('!http://.*?/photos/.*?/(\d+)!i', 'http:/example.com/sites/default/files/1301584398_file.jpg', $match)) {
$id = $match[1];
$info = $f->photos_getInfo($id);
$sizes = $f->photos_getSizes($id);
foreach($sizes as $size => $sizedata) {
if ($size == "Large" || $size == "Original") {
$source = $sizedata['source'];
if (preg_match('/\.(jpg|jpeg)$/i', $source)) {
$jpg = imagecreatefromjpeg($source);
}
if (preg_match('/\.png$/i', $source)) {
$jpg = imagecreatefrompng($source);
}
if (preg_match('/\.gif$/i', $source)) {
$jpg = imagecreatefromgif($source);
}
break;
}
}
我最困惑的是
preg_match('!http://.*?/photos/.*?/(\d+)!i', $url, $match)
這個是來做什么的? 由於輸入模式已經改變,我不知道它之前看起來有點令人困惑......
另一個功能很清楚。 它們旨在獲取文件的擴展名。
!http://.*?/photos/.*?/(\\d+)!i
表示不區分大小寫匹配的http://.*?/photos/.*?/(\\d+)
,其中模式分隔符用的是!
。
http://.*?/photos/.*?/(\\d+)
匹配任何在其中有/photos/
網址,然后是更多內容,以/
和某些數字結尾。
.*?
嘗試匹配盡可能少的字符,可能根本沒有。 \\d+
嘗試匹配盡可能多的數字,最小值為1。
preg_match ()是一個函數,用於對字符串進行正則表達式匹配,並將匹配存儲到數組中。
第一個參數是正則表達式。 它是用於定義匹配文本的模式的特殊語法。 我強烈推薦以下用於學習正則表達式語法的鏈接,因為它非常有用,雖然起初有點神秘而且難以破譯。
在你的模式中:
!
- 正則表達式分隔符 /
,但我們需要在我們的模式中使用斜杠)。 http://
- 字符串'http://'的字面匹配 .*?
- 匹配任何字符( .
),零次或多次( *
),並且'懶惰'( ?
)。 /photos/
- 另一個文字字符串匹配 .*?
- 與上述相同的模式。 (0或更多任何char,告訴正則表達式引擎是懶惰的) /
- 正斜杠的文字字符串匹配'/' ( )
- 在正則表達式中,括號是一個特殊字符。 (\\d+)
- 匹配一個或多個數字\\d+
,並創建一個包含匹配的組。 i
- 用於告訴正則表達式引擎忽略大小寫的標志。 這個說法:
preg_match('!http://.*?/photos/.*?/(\d+)!i', $url, $match)
搜索http://
字符串,后跟任何字符,直到第一個/
,然后是photos/
,然后是任何其他字符序列,直到另一個/
,然后是通過反向引用記錄的一個或多個數字的序列。
換句話說,掃描第二段為photos
http鏈接並抓取URL末尾的數字ID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.