Регулярные выражения на php

      Комментарии к записи Регулярные выражения на php отключены

Главная Форумы Программирование Веб программирование Регулярные выражения на php

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 мес. назад.

  • Автор
    Сообщения
  • #3700

    Эта статья будет о регулярных выражениях на php. Вообще это не так трудно как кажется, но все же, нужно запастись терпением для изучения.

    Самое начало это знакомство с синтаксисом (правилом написания) функции. Выглядит он так:

    <?php
    
    preg_match("/шаблон по которому ищем/", $text, $out);
    
    /*
    
    preg_match - это сама функция поиска.
    
    $text - это переменная в которой хранится 
            какой-либо текст, в котором мы будем искать
            подстроки
    
    $out - массив, куда будут записаны результаты поиска
    
    */
    ?>

    Теперь когда мы знаем как пишется функция поиска, я могу объяснить вам как писать шаблоны для поиска. Это самое главное в изучении регулярных выражений.

    Возьмем самое простое, поиск подстроки abc в строке itblogs_abc. Для этого создадим такой шаблон для поиска:

    <?php
    
    $template="/abc/";
    
    /*
    Заметьте, что при написании шаблона,
    мы в начале и конце указываем / (слэш)
    , что означает начало и конец 
    шаблона для поиска.
    */
    
    $text="itblogs_abc";
    
    preg_match($template, $text, $out);
    
    //тег pre мы выводим лишь для удобства чтения,
    //можете не обращать на него внимания
    
    echo "<pre>";
    print_r($out);
    echo "</pre>";
    ?>

    Здесь мы записали в шаблон строку abc. Это значит что функция будет искать строку abc, в строке itblogs_abc.

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

    Вот такие примеры:

    • \d — этот шаблон, соответствует любой десятичной цифре. (Пример: 1, 2, 3, 4 и т.д.)
    • \w — все буквы, все цифры и знак подчеркивания

    То есть, если у нас будет такой код:

    <?php
    $template="/\d/";
    
    $text="itblogs1abc";
    
    preg_match($template,$text,$out);
    
    echo "<pre>";
    print_r($out);
    echo "</pre>";
    ?>

    он выведет на экран цифру 1. Так как мы задали искать ему любую десятичную цифру. Но что делать если вы хотите найти не одну цифру, а сразу несколько, стоящих рядом?

    Для этого в регулярных выражениях на php есть границы. Работаю они вот так: мы пишем в шаблоне поиска что хотим найти, а потом сразу же в таких скобках, сколько таких символов требуется {}.

    То есть \d{2}, будет искать все двузначные числа. И здесь есть очень полезная вещь, как \d{1,2}. Теперь функция найдет нам все однозначные и двузначные числа. (Шаблон ищет все числа длиной от 1 до 2. К примеру \d{1,3} будет искать от 1 до 3).

    Теперь перейдем к небольшой практике. Сразу напишу таблицу шаблонов символов для дальнейшего изучения:

    .Один произвольный символ. Кроме ‘\n’ — конец строки.
    *Повторяется 0 или большее число раз
    \nНовая строка
    \sОдин пробел
    \w+Слово

    Практика будет такая 🙂 К примеру нам нужно выбрать все что находится между тегами <title> и </title>. Для этого пишем такой код:

    <?php
    
    $template="/<title.*>(.*)<\/title>/";
    
    /*
    Здесь вы заметили, что перед знаком /
    в title, я поставил знак \ . 
    Это означает, что / в title
    не должен считаться за какой-либо спец-символ.
    То есть он будет как простой символ.
    */
    
    preg_match($template,$text, $out);
    
    echo "<pre>";
    print_r($out);
    echo "</pre>";
    
    ?>

    Здесь между тегами <title> и </title> мы поставили знаки (.*), которые означают любые знаки. (Между тегами может находиться любой текст).

    Теперь расскажу вам о функции preg_match_all. Если preg_match выбирает только первое что нашла, то preg_match_all ищет ВСЕ вхождения в строке.

    Вот пример кода:

    <?php
    
    $template="/\d/";
    $text="2it3blogs4";
    
    preg_match_all($template,$text,$out);
    
    echo "<pre>";
    print_r($out);
    echo "</pre>";
    
    ?>

    Здесь поиск найдет все однозначные цифры. То есть: 2,3 и 4. Итак, на этом думаю закончу, но цикл статей по регулярным выражениям наверное будет продолжен.

Для ответа в этой теме необходимо авторизоваться.