На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
  
    > Модификаторы в регулярных выражениях
      ExpandedWrap disabled
        $threadpost =~ s~\[img width=(\d+) height=(\d+)\](.+?)\[/img\]~$3~eisg;

      Как я понял, здесь всё выражение заменяется на имя картинки.
      А что означают суффиксы e и s (в eisg) ?
      Сообщение отредактировано: vot -
        Здесь должно быть: http://perlbook.nm.ru/perl_3.html
          Даже если бы это можно было назвать суффиксами, то это постфиксы.
          А на самом деле - это опции оператора замены.

          s - обработка строки как однострочной ($ - конец всей строки)
          e - исполнение выражения замены

          http://www.hotelshop.ru/download/perldoc.chm
            Регулярные выражения.

            Модификаторы команд m/.../ и s/.../.../

            В Perl имеется несколько модификаторов, используемых, с командами m/.../ и
            s/.../.../.

             i - игнорирует различие между заглавными и строчными буквами.

             s - метасимволу <точка> разрешено соответствовать символам \n.

             m - разрешает метасимволам ^ и $ привязываться к промежуточным символам \n, имеющимся в тексте. Не влияет на работу метасимволов \А, \Z и \z.

             х - игнорирует <пробельные символы> в шаблоне (имеются в виду <истинные> пробелы, а не метасимволы \s и пробелы, созданные через escape-последовательности). Разрешает использовать внутри шаблона комментарии.

             g - выполняет глобальный поиск и глобальную замену.

             c - после того как в скалярном контексте при поиске с модификатором g не удалось найти очередное совпадение, НЕ позволяет сбрасывать текущую позицию поиска. Работает только для команды m/.../ и только вместе с модификатором g.

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

             е - показывает, что правый аргумент команды s/.../.../ - это фрагмент выполняемого кода. В качестве текста для подстановки будет использовано возвращаемое значение - возможно, после процесса интерполяции;

             ee - показывает, что правый аргумент команды s/.../.../ - это строковое выражение, которое надо вычислить и выполнить как фрагмент кода (через функцию eval). В качестве текста для подстановки используется возвращаемое значение - возможно, после процесса интерполяции.

            (Некоторые модификаторы - например, i, s, m, x - могут находиться в дополнительных конструкциях.)

            В качестве примера рассмотрим сценарий, в котором пользователь выполняет команду выхода, вводя слово <stop>, <STOP> или даже <StOp>, то есть без учета регистра:

            while (<>) {
             if (m/^stop$/i)-{exit;}
            }
              Цитата vot, 29.08.03, 13:22:27
              s - метасимволу <точка> разрешено соответствовать символам \n.


              Не совсем так. Точнее совсем не так.
              s - метасимволу "конец строки" соответствует мнимый символ после последнего символа во всей строке.
              ExpandedWrap disabled
                $str="abcdefg<br>abcdefg<br>abcdefg<br>";<br><br>$str=~s/\s$//gos;<br>print "{$str}";

              Вывод:
              ExpandedWrap disabled
                {abcdefg<br>abcdefg<br>abcdefg}

              m - метасимолу "конец строки" соотвествует текущее определение конца строки ($\).
              ExpandedWrap disabled
                $str="abcdefg<br>abcdefg<br>abcdefg<br>";<br><br>$str=~s/\s$//gom;<br>print "{$str}"

              Вывод:
              ExpandedWrap disabled
                {abcdefgabcdefgabcdefg}


              Иначе.
              Опция "s":
              ExpandedWrap disabled
                {##############<br>####################<br>#################<br>##################}

              Опция "m":
              ExpandedWrap disabled
                {##############<br>}{####################<br>}{#################<br>}{##################<br>}
              Сообщение отредактировано: Tishaishii -
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0244 ]   [ 15 queries used ]   [ Generated: 27.04.24, 21:34 GMT ]