• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Иллюстрированный самоучитель по Perl

    Операции с регулярными выражениями

    В данной главе неоднократно упоминались операции с регулярными выражениями, такие как поиск по образцу. Основными среди них являются: операция поиска т//, операция замены s/// и операция транслитерации tr///.

    Операция поиска

    m/PATTERN/cgimosx
    

    Операция поиска HI/PATTERN/ осуществляет поиск образца PATTERN. Результатом операции является значение 1 (ИСТИНА) или "пустая строка"(ЛОЖЬ). По умолчанию поиск осуществляется в строке, содержащейся в специальной переменной $_. Можно назначить другую строку для поиска в ней заданного образца при помощи операций связывания =~ или! ~:

    $var =~ m/PATTERN/cgimosx
    

    В результате последней операции поиск образца PATTERN будет осуществляться в строке, задаваемой переменной $var. Если в правой части операции связывания стоит операция поиска т//, то в левой части может находиться не обязательно переменная, а любое строковое выражение.

    Операция! ~ отличается от операции =~ тем, что возвращает противоположное логическое значение. Например, в результате поиска в строке "aaabbbccc" образца /b+/Г:

    $s="aaabbbccc" =~ m/b+/; $s="aaabbbccc"!~ m/b+/;,
    

    …в обоих случаях будет найден фрагмент ььь. Но в первом случае возвращаемое значение, сохраненное в переменной $s, будет равно 1 (ИСТИНА), а во втором случае – пустой строке " (ЛОЖЬ).

    Образец PATTERN может содержать переменные, значения которых подставляются при каждом выполнении поиска по данному образцу.

    Флаги cgimosx модифицируют выполнение операции поиска. Флаги imsx имеют тот же смысл, что и в рассмотренном выше случае конструкции расширенного регулярного выражения (?imsx-imsx).

    • i – поиск без учета регистра;
    • m – трактуется как мульти-строка, состоящая из нескольких строк, разделенных символом новой;
    • s – строка трактуется как одна строка, в этом случае метасимволу "." соответствует любой одиночный символ, включая символ новой строки;
    • х – разрешается использовать в образцах пробелы и комментарии.
    • g – Задает глобальный поиск образца в заданной строке. Это означает, что будут найдены все фрагменты текста, удовлетворяющие образцу, а не только первый из них, как имеет место по умолчанию.

    Возвращаемое значение зависит от контекста. Если в составе образца имеются подобразцы, заключенные в скобки (), то в контексте массива для каждого заключенного в скобки подобразца возвращается список всех найденных фрагментов. Если в составе образца нет подобразцов, заключенных в скобки, то в контексте массива возвращается список всех найденных фрагментов, удовлетворяющих образцу. В скалярном контексте каждая операция m//g осуществляет поиск следующего фрагмента, удовлетворяющего образцу, возвращая значение 1 (ИСТИНА), если он найден, и пустую строку ", если не найден. Позиция строки, в которой завершился последний поиск образца при установленном флаге g, может быть получена при помощи встроенной функции роз о (см. ниже). Обычно при неудачном поиске начальная позиция поиска восстанавливается в начало строки. Флаг с отменяет восстановление начальной позиции поиска при неудачном поиске образца.

    Рассмотрим следующий скрипт.

    $str="abaabbaaabbbaaaabbbb";
    tt контекст массива, нет подобразцов в скобках
    @result=$str =~m/a+b+/g;
    print "контекст массива, нет конструкций в скобках:\n";
    print "\@result=@result\n";
    # контекст массива, есть конструкции в скобках, задающие обратные ссылки
    @result=$Str =~m/(a+)(b+)/g;
    print "контекст массива, есть конструкции в скобках:\n";
    print "\@result=@result\n";
    # скалярный контекст
    print "скалярный контекст:\n";
    while ($result=$str =~m/(a+)(b+)/g) {
    print "result=$result, current match is $&, position=",pos($str),"\n"; }
    

    Результатом его выполнения будет вывод:

    контекст массива, нет конструкций в скобках:
    @result=ab aabb aaabbb aaaabbbb
    контекст массива, есть конструкции в скобках:
    @result=a b aa bb ааа bbb aaaa bbbb
    скалярный контекст:
    result=l, current match is ab, position=2
    result=l, current match is aabb, position=6
    result=l, current match is 'aaabbb, position=12
    result=l, current match is aaaabbbb, position=20
    

    Используется совместно с флагом g. Отменяет восстановление начальной позиции поиска при неудачном поиске образца.

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.