• Партнер

  • Итак, я продолжу экскурс по Perl - мощнейшей среде программирования.
    Как и обещал - обозреваю некоторые регулярные выражения.
    Вообще, если писать о регулярных выражениях, то на это уйдет целая глава, так что, я напишу лишь о наиболее привлекательных выражениях.

    Выделение ip-адреса

    Допустим, тебе нужно проверить, является ли строка IP-адресом. Это можно сделать, как простой проверкой:

    if ($string=~/(.*)\.(.*)\.(.*)\.(.*)/) { }

    где проверяется наличие 3-х точек (разделителей звеньев ip-адреса),
    так и более полной проверкой:

    if ($string=~/^[01]?\d\d|2[0-4]\d|25[0-5])\.[01]?\d\d|2[0-4]\d|25[0-5])\. [01]?\d\d|2[0-4]\d|25[0-5])\.[01]?\d\d|2[0-4]\d|25[0-5])$/) { }

    где проверяется корректность адреса (на предмет чисел).

    Тебе решать, что использовать 🙂 Это зависит от проги, которую ты пишешь. Если ты пишешь продукт, для всеобщего обозрения 🙂 то ты должен тщательно выполнять проверку входных данных (мало ли какие пользователи будут юзать).

    Удаление комментариев C

    Бывает, что в скрипте идет обработка C кода. Для этого нужно использовать оператор замены, при помощи регулярных выражений. Смысл заключается в удалении символов комментариев /* и */ :

    s{
    /\*
    .*?
    \*/
    } []gsx;

    Обработка ini-файла

    Здесь под ini подразумевается любой конфиг-файл, типа "переменная=значение". Задача - выделить значение из файла. Выделим файловую переменную в $1, а ее значение в $2:

    open(INI,"conf.ini");
    while (INI) {
    chomp;
    ~/(\w+)\s*=\s*(.*)\s*$/
    }
    close(INI);

    Где \w - любое слово, \s - символ пробела. ".*" - любая последовательность символов (не обязательно, что переменная и значение не отделяются пробелом от знака равенства).

    Проверка операционной системы

    В перловой переменной $^O хранится полное название твоей операционки. Бывает, что в скрипте нужно узнать, с какой системой работает скрипт.
    Пользуясь переменной, проверяем:

    die "This is windows\n" if $^O = ~/windows/i;

    Поиск ссылок в HTML-документах

    Актуальная проблема - найти все ссылки в каком либо html-файле. Использование регулярного выражения значительно все упростит:

    @urls = ~/<a[^>]+?href\s*=\s*["']?([^'" >]+?)[ '"]?>/sgi;

    Суть поиска заключается в выделении всех символов после href= и перед кавычкой или апострофом. Все ссылки после поиска будут в массиве @urls 🙂

    Вот пожалуй наиболее интересные regexp`ы, про которые я хотел написать.

    Удачи в кодинге.

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии