Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.21.244.137] |
|
Сообщ.
#1
,
|
|
|
У меня есть сайт написанный на perl и возникла проблема.
На главной сайта я вывожу новости. Хочу сделать так, чтобы выводилась не вся новость, а только её первый допустим 100 сивмолов. Т.е. при обработки главной перл ф-я должна просто вырезать первые 100 символов новости и послать пользователю. Вся проблема в том, что новости у меня храняться в html. Вот например захожу в базу и беру первую попавщуюся новость: <P>В банках Екатеринбурга наблюдается значительное уменьшение объемов валютно-обменных операций. Об этом свидетельствует незначительная разница курсов покупки и продажи наличной валюты, в частности, доллара США. </P> <P>Как рассказала начальник валютного управления СКБ-банка Людмила Беляева, рынок в настоящее время вяло реагирует на подъем курса доллара - спрос на него практически не изменился с начала года. <BR><BR>"Отсутствие спроса на наличную валюту может быть связано с тем, что большинство расчетов население совершает в рублях, постепенно отказываясь от американских долларов. Безусловно, это большой плюс для развития национальной экономики", - считает госпожа Беляева.</P> Почему в html, потому что в моём движке присутствует поле, в кот. при создании новости можно вставить новость, и редактировать её как в Word: форматировать текст, встявлять картинки, создавать список и т.д. Так вот. Перловскую ф-ю я написал: 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) |
Сообщ.
#2
,
|
|
|
Это уже было. Примеры имеются. RTFFM... И поиск в руки. По форуму хотя бы.
|
Сообщ.
#3
,
|
|
|
Цитата Будь добор, скажи где?Это уже было. Цитата Не сомневаюсь.Примеры имеются. Цитата ?RTFFM... Цитата К сожалению не нашёл, потому и создал тему.И поиск в руки. Цитата Поискал - не нашёл. Дай пожалуйста ссылку. По форуму хотя бы. |
Сообщ.
#4
,
|
|
|
Уговорил, гугель не находит у нас на сайте :)
$line =~ s/<(([^ >]|\n)*)>//g; Нашел здесь. Все-таки гугель рулит. Это полезнейший документ. ЗЫ. Глубокоуважаемые Тишайший, SergeS, Mastilior, когл-нибудь из вас не затруднит отправить данное выражение в FAQ? |
Сообщ.
#5
,
|
|
|
Цитата Ho Im @ ЗЫ. Глубокоуважаемые Тишайший, SergeS, Mastilior, когл-нибудь из вас не затруднит отправить данное выражение в FAQ? Ho Im, предлагаю Вам оформить вопрос/ответ и выложить его в теме Обсуждение FAQ'ов. Ваш пост перенесут в FAQ. |
Сообщ.
#6
,
|
|
|
Уже. Спасибо за подсказку, а то сам я не местный...
|
Сообщ.
#7
,
|
|
|
К сожалению конструкция
Цитата несовершенна.$line =~ s/<(([^ >]|\n)*)>//g; Например ф-я не может обработать двойные ковычки: Цитата <TABLE border="1"><UL><LI><DIV align=center> Рейтинг самых и вылазиет ошибка. Также не может обработать встречающийся в html переход на новую строку. Добавлено Вот такой тег пропускает : </UL> |
Сообщ.
#8
,
|
|
|
Во-первых, надо только лишь убрать лишний пробел:
$line =~ s/<(([^>]|\n)*)>//g; Во-вторых, многострочность заменяемого выражения решается модификатором /s. man perlre. Или perldoc perlre. |
Сообщ.
#9
,
|
|
|
Ок. Потестировал, вроде пашет. Будут косяки - отпишусь
Спасибо тебе, Ho Im. |