За последние 24 часа нас посетил 62191 программист и 1800 роботов. Сейчас ищут 822 программиста ...

Параметры в функции preg_match

Тема в разделе "Регулярные выражения", создана пользователем kombain, 9 сен 2010.

  1. kombain

    kombain Активный пользователь

    С нами с:
    28 авг 2010
    Сообщения:
    50
    Симпатии:
    0
    Здравствуйте все php программисты.
    У функции preg_match() можно задать третий параметр $matches, являющийся массивом. Никак не могу разобраться, зачем этот массив нужен. Когда в нём будет один элемент, а когда 2 и больше? Что за значения в нём будут содержаться? Также у функции есть пятый параметр $offset, который тоже не очень понятный. Объясните их значение.
    Спасибо.
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    3 - В нём будет содержаться результат нахождений.
    5 - Место, откуда начинать обрабатывать строку.
     
  3. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
  4. kombain

    kombain Активный пользователь

    С нами с:
    28 авг 2010
    Сообщения:
    50
    Симпатии:
    0
    Я не знаю что такое подмаска.

    Апельсин, по ссылке, что вы мне дали, похоже, некорректный или просто устаревший перевод.
    Вот что там написано:

    Поиск осуществляется слева направо, с начала строки. Дополнительный параметр offset может быть использован для указания альтернативной начальной позиции для поиска. Аналогичного результата можно достичь, заменив subject на substr()($subject, $offset). Дополнительный параметр offset доступен начиная с PHP 4.3.3.

    А так на php.net:
    Using offset is NOT equivalent to passing substr($subject, $offset) to preg_match() in place of the subject string, because pattern can contain assertions such as ^, $ or (?<=x).
    Наверное, лучше пользоваться php.net как первоисточником
     
  5. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    йопт, нахрена тогда спрашивать? Типа все всегда пишут один в один как в мануале написано.
     
  6. kombain

    kombain Активный пользователь

    С нами с:
    28 авг 2010
    Сообщения:
    50
    Симпатии:
    0
    Я спросил, что это за параметры, потому что не знаком с регулярными выражениями и не могу разобраться с мануалом.
     
  7. kombain

    kombain Активный пользователь

    С нами с:
    28 авг 2010
    Сообщения:
    50
    Симпатии:
    0
    neverlose, согласен.
    А что такое подмаска?
     
  8. StVolodymyr

    StVolodymyr Активный пользователь

    С нами с:
    6 окт 2010
    Сообщения:
    6
    Симпатии:
    0
    Пример:
    есть дата в таком виде: 20101006, нужно сделать вот так: 06.10.2010

    можно использовать такой код

    PHP:
    1.  
    2. <?
    3. $date = '20101006';
    4. $matches = array();
    5. if (preg_match('/(\d{4})(\d{2})(\d{2})/')){
    6.     echo $matches[3].".".$matches[2].".".$matches[1];
    7. }
    8. ?>
    9.  
    значением $matches[1] - будет то что совпало с первыми скобками регулярного выражения, $matches[2] со вторыми и т.д. это и называется соответственно 1-я, 2-я ... маски.
    а $matches[0] - полное совпадение регулярного выражения

    но намного интереснее функция preg_match_all и ее третий параметр
     
  9. kombain

    kombain Активный пользователь

    С нами с:
    28 авг 2010
    Сообщения:
    50
    Симпатии:
    0
    StVolodymyr, спасибо за помощь. Сам постепенно осваиваю эти функции и понемногу разбираюсь в этих параметрах