Путаница с preg_match - PullRequest
       24

Путаница с preg_match

0 голосов
/ 05 апреля 2011

это наверное очень простой вопрос ...Я действительно не знаю, как использовать поиск по шаблону (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)

Для чего это?Поскольку шаблон ввода изменился, и я понятия не имею, как он выглядел раньше, это немного сбивает с толку ...Другая функция довольно понятна.Они предназначены для получения расширений файлов.

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

preg_match () - это функция, используемая для сопоставления регулярного выражения со строкой и сохранения совпадений в массиве.

Первый параметр - это регулярное выражение. Это специальный синтаксис, используемый для определения шаблонов для сопоставления текста. Я настоятельно рекомендую следующую ссылку для изучения синтаксиса регулярных выражений, поскольку она очень полезна, хотя сначала немного загадочна и сложна для расшифровки.

Regular-Expressions.info

В вашем шаблоне:

  • ! - разделитель регулярных выражений
    (обычно регулярное выражение использует /, но нам нужно использовать косые черты буквально в нашем шаблоне).
  • http:// - буквальное совпадение строки 'http://'
  • .*? - совпадать с любым символом (.), ноль или более раз (*) и быть «ленивым» (?).
    (Ленивый означает: сопоставить наименьшее возможное количество символов, одновременно удовлетворяя
    всей схеме)
  • /photos/ - еще одно совпадение буквенной строки
  • .*? - тот же шаблон, что объяснен выше. (0 или более символов, скажите движку regex, что он ленивый)
  • / - буквальное совпадение строки для косой черты '/'
  • ( ) - В регулярных выражениях круглые скобки являются специальным символом.
    Используется для создания группы для последующего использования в качестве $ match [1].
  • (\d+) - сопоставить одну или несколько цифр \d+ и создать группу для сопоставления.
  • i - Флаг, используемый для указания движку регулярных выражений игнорировать регистр.
1 голос
/ 05 апреля 2011

!http://.*?/photos/.*?/(\d+)!i означает нечувствительное к регистру совпадение http://.*?/photos/.*?/(\d+), где использовался разделитель шаблона !.

http://.*?/photos/.*?/(\d+) соответствует любому URL, содержащему /photos/, затем что-то еще, заканчивающееся / и некоторыми числами.

.*? пытается сопоставить как можно меньше символов, возможно, ни одного. \d+ пытается найти максимально возможное число, с минимальным значением 1.

0 голосов
/ 05 апреля 2011

Это утверждение:

preg_match('!http://.*?/photos/.*?/(\d+)!i', $url, $match)

ищет строку http://, за которой следует любой символ до первого /, затем photos/, затем любая другая последовательность символов до другого /, затем последовательность из одной или нескольких цифр, которые записываются по обратной ссылке.

Другими словами, отсканируйте ссылки http, второй сегмент которых равен photos, и получите числовой идентификатор в конце URL-адреса.

...