簡體   English   中英

與preg_match混淆

[英]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 ()是一個函數,用於對字符串進行正則表達式匹配,並將匹配存儲到數組中。

第一個參數是正則表達式。 它是用於定義匹配文本的模式的特殊語法。 我強烈推薦以下用於學習正則表達式語法的鏈接,因為它非常有用,雖然起初有點神秘而且難以破譯。

Regular-Expressions.info

在你的模式中:

  • ! - 正則表達式分隔符
    (通常正則表達式使用/ ,但我們需要在我們的模式中使用斜杠)。
  • http:// - 字符串'http://'的字面匹配
  • .*? - 匹配任何字符( . ),零次或多次( * ),並且'懶惰'( ? )。
    (懶惰意味着:匹配盡可能少的字符數,同時仍然令人滿意
    整個模式)
  • /photos/ - 另一個文字字符串匹配
  • .*? - 與上述相同的模式。 (0或更多任何char,告訴正則表達式引擎是懶惰的)
  • / - 正斜杠的文字字符串匹配'/'
  • ( ) - 在正則表達式中,括號是一個特殊字符。
    用於創建一個組,以便稍后引用為$ match [1]。
  • (\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM