На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
  
    > Регулярные выражения, Perl , Помогите пожалуйста
      У меня есть сайт написанный на perl и возникла проблема.
      На главной сайта я вывожу новости. Хочу сделать так, чтобы выводилась не вся новость, а только её первый допустим 100 сивмолов. Т.е. при обработки главной перл ф-я должна просто вырезать первые 100 символов новости и послать пользователю. Вся проблема в том, что новости у меня храняться в html. Вот например захожу в базу и беру первую попавщуюся новость:
      ExpandedWrap disabled
         
        <P>В банках Екатеринбурга наблюдается значительное уменьшение объемов валютно-обменных операций. Об этом свидетельствует незначительная разница курсов покупки и продажи наличной валюты, в частности, доллара США. </P>
        <P>Как рассказала начальник валютного управления СКБ-банка Людмила Беляева, рынок в настоящее время вяло реагирует на подъем курса доллара - спрос на него практически не изменился с начала года. <BR><BR>"Отсутствие спроса на наличную валюту может быть связано с тем, что большинство расчетов население совершает в рублях, постепенно отказываясь от американских долларов. Безусловно, это большой плюс для развития национальной экономики", - считает госпожа Беляева.</P>

      Почему в html, потому что в моём движке присутствует поле, в кот. при создании новости можно вставить новость, и редактировать её как в Word: форматировать текст, встявлять картинки, создавать список и т.д.
      Так вот. Перловскую ф-ю я написал:
      ExpandedWrap disabled
        sub short_news
        {
           print ('qqq функция short_news ***');
           my $text = "";    # текст, кот. нужно урезать до 100 символов.
           my $i = '100';
           $text =~ s/^(.{$i})//;
           $text = $1;
           return $text;
        }

      Но если в переменной text встречаются теги html, то она не работает.
      Помогите пожалуйста с регулярным выражением, кот. вырезает теги html.
      Прикреплённый файлПрикреплённый файлhelp.gif (12 Кбайт, скачиваний: 249)
        Это уже было. Примеры имеются. RTFFM... И поиск в руки. По форуму хотя бы.
          Цитата

          Это уже было.
          Будь добор, скажи где?

          Цитата

          Примеры имеются.
          Не сомневаюсь.
          Цитата

          RTFFM...
          ?

          Цитата

          И поиск в руки.
          К сожалению не нашёл, потому и создал тему.

          Цитата

          По форуму хотя бы.
          Поискал - не нашёл. Дай пожалуйста ссылку. ;)
            Уговорил, гугель не находит у нас на сайте :)
            ExpandedWrap disabled
              $line =~ s/<(([^ >]|\n)*)>//g;


            Нашел здесь. Все-таки гугель рулит. Это полезнейший документ.

            ЗЫ. Глубокоуважаемые Тишайший, SergeS, Mastilior, когл-нибудь из вас не затруднит отправить данное выражение в FAQ?
              Цитата Ho Im @
              ЗЫ. Глубокоуважаемые Тишайший, SergeS, Mastilior, когл-нибудь из вас не затруднит отправить данное выражение в FAQ?

              Ho Im, предлагаю Вам оформить вопрос/ответ и выложить его в теме Обсуждение FAQ'ов. Ваш пост перенесут в FAQ.
                Уже. Спасибо за подсказку, а то сам я не местный...
                Сообщение отредактировано: Ho Im -
                  К сожалению конструкция
                  Цитата
                  $line =~ s/<(([^ >]|\n)*)>//g;
                  несовершенна.
                  Например ф-я не может обработать двойные ковычки:
                  Цитата
                  <TABLE border="1"><UL><LI><DIV align=center> Рейтинг самых

                  и вылазиет ошибка.
                  Также не может обработать встречающийся в html переход на новую строку.

                  Добавлено
                  Вот такой тег пропускает : </UL>
                    Во-первых, надо только лишь убрать лишний пробел:
                    ExpandedWrap disabled
                      $line =~ s/<(([^>]|\n)*)>//g;


                    Во-вторых, многострочность заменяемого выражения решается модификатором /s. man perlre. Или perldoc perlre.
                      Ок. Потестировал, вроде пашет. Будут косяки - отпишусь :)
                      Спасибо тебе, Ho Im.
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0291 ]   [ 14 queries used ]   [ Generated: 18.05.24, 05:13 GMT ]