Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Регулярные выражения (RegExp'ы): нужна консультация

Добрый день, друзья!

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

В качестве благодарности буду рад отключить Вам рекламу Subscribe.ru
сроком на год :) Стоимость услуги у самого Subscribe.ru = 300 p.

P.S. Регулярное выражение будет задействовано под PHP.

--
26.01.2008 - 14:12

С уважением, Славников Дмитрий
http://subscribe.ru/author/9810
E-mail: slavnikov***@c*****.by
Mobile: (+375 29) 629-30-43
ICQ: 115041944

Ответить   "Dmitry V. Slavnikov" Sat, 26 Jan 2008 14:14:21 +0200 (#720825)

 

Ответы:

А что именно нужно? У меня имеется некоторый опыт.
С уважением.
Вадим Шешунов.
Original Message From: "Dmitry V. Slavnikov" <slavnikov***@c*****.by>
To: "comp.soft.prog.prog (8059844)" <vad_she***@u*****.net>
Sent: Saturday, January 26, 2008 2:14 PM

Ответить   Вадим Шешунов Sun, 27 Jan 2008 10:05:21 +0200 (#720870)

 

Здравствуйте !

Вадим, напоминаю, что оверквотинг (избыточное цитирование)
приносит неудобства другим подписчикам данного листа.
Пожалуйста, отрезайте все лишнее (особенно служебную
информацию, "подвалы" писем, и.т.д.).

Ответить   Sun, 27 Jan 2008 11:54:52 +0300 (#720877)

 

Да. Простите меня. Давно уже не общался в этом листе-))))
С уважением.
Вадим Шешунов.

Ответить   Вадим Шешунов Sun, 27 Jan 2008 11:06:12 +0200 (#720881)

 

Могу помочь по PCRE.

Ответить   Sun, 27 Jan 2008 00:09:20 +0200 (#720873)

 

Здравствуйте !

В принципе, тоже могу помочь. Без проблем.

Ответить   Sun, 27 Jan 2008 11:56:07 +0300 (#720878)

 

Добрый вечер, друзья!

27.01.2008 Вы написали мне письмо:
mid:20080127113519.7208***@c*****.subscribe
Тема: "Re: Регулярные выражения (RegExp'ы): нужна консультация"

В первую очередь обращаюсь к тем, кто откликнулся:
Grishkе, Вадиму Шешунову и Вахтурову Виктору.
(ну и к остальным, кто может помочь с регулярными выражениями).

Нужно силами регулярных выражений в PHP (а насколько я знаю,
PHP поддерживает и синтаксис регулярных выражений Perl'a)
реализовать следующее:

есть некий текст, состоящий из 3-х частей:
шапки, тела, подписи (или, как говорят, хедера, боди и футера).
Необходимо из текста убрать хедер и футер (я предполагаю делать
это с помощью функции eregi_replace();

что известно, известно о части текста под названием "шапка"
(хедер):

во-первых, текст начинается именно с нее,
во-вторых, она занимает несколько строк, причем неизвестно сколько
(т.е. это может быть 3 строки или больше),
в-третьих, она может содержать любые символы (текст, числа и т.п.),
но заканчивается она всегда следующим образом: указан е-мэйл, часть
у которого постоянная (всегда) и выглядит так:
-lala@a*****.by
после этого е-мэйла может быть от нуля до нескольких пробелов, перевод
строки и длинная строка, составленная из знаков равно
т.е. типа: (точно не задано,
сколько их, т.е. число может менять, но в любом случае больше 30

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

Пример шапки:

. ля траляля ля .
.................... [ красивый текст ] ..............................
. 222 333 44 - числа (!) <= знаки разные
опять текст и числа 222 снова текст и числа 333 и еще немного текста -
числе 22-33-2008 опять текст и числа префикс.текст-lala@a*****.by
вот это был пример шапки - несколько строк, мы не знаем, что в ней
(может быть разное), но четко всегда она заканчивается одним и тем же.

теперь по поводу футера (или подвала)...

что известно про него - им заканчивается текст
количество строк в нем четко не определено, может изменяться, но зато
четко известно, с чего начинается подвал, а начинается он вот с такой
последовательности символов: тире звездочка тире (несколько - от 4)

-жгде после звездочки минимум идет четыре знака тира (но может идти
больше) причем явно известно, что на этой строчке кроме пробелов
(возможных, т.е. пробелы от 0 до не знаю скольки) ничего нет, это
знак начала футера

обращаю Ваше внимание, что ниже последовательность знаков начала
футера может еще раз повторяться, т.е. например так:

-жфутер шмутер тра ля ля
и еще какая-то строчка с разными знаками ! . " @ и т.п.
-жи снова какие-то строчки непонятной природы...

Вот. Надеюсь, что объяснил достаточно подробно.

Вот пример текста, над которым можно эксперементировать:
http://soros.cima.ru/temp/regexp-example.txt

и вот, что после удаления хедера и футера должно остаться:
http://soros.cima.ru/temp/regexp-result.txt

--
27.01.2008 - 22:19

С уважением, Славников Дмитрий
http://subscribe.ru/author/9810
E-mail: slavnikov***@c*****.by
Mobile: (+375 29) 629-30-43
ICQ: 115041944

Ответить   "Dmitry V. Slavnikov" Mon, 28 Jan 2008 00:47:02 +0200 (#721201)

 

Попросту говоря, в тексте нужно найти фиксированный ИМейл (именно
фиксированный, который вы точно знаете), а за ним через пару-тройку
переводов строки строку "========...=" из неменее чем 30 символов =. И
отступя, еще раз строку Если я это понял правильно, то я бы не стал регуляркой пользоваться.
$s=substr($s,strpos($s,str_repeat('=',30))+30);
while(substr($s,0,1))=='=')$s=substr($s,1);
$s=substr($s,strpos($s,str_repeat('=',30))+30);
while(substr($s,0,1))=='=')$s=substr($s,1);
Теперь в $s у нас тело+футер (т.е. мы отрезали все по вторую двойную линию).
Конечно эти две строчки можно "прокатить" в цикле for от 1 до 2.
$s=substr($s,0,strpos($s,'-ж----')) - без футера нужная "середка"-)))
С уважением.
Вадим Шешунов.

Ответить   Вадим Шешунов Mon, 28 Jan 2008 20:08:07 +0200 (#721221)

 

Доброй ночи, уважаемый Вадим!

28.01.2008 Вы написали мне письмо:
mid:20080128210017.7212***@c*****.subscribe
Тема: "Re[3]: Регулярные выражения (RegExp'ы): нужна консультация"

Почему не стали бы?..

Почему-то у меня этот код отказываться работать и вообще выскакивае
сообщение об ошибке:
Parse error: syntax error, unexpected T_IS_EQUAL in /home/cimaruwe/domains/cima.ru/public_html/soros/temp/3.php
on line 6
это строчка, где находится первый цикл...

P.S. мне уже прислали работающий регэксп! :)
--
29.01.2008 - 3:09

С уважением, Славников Дмитрий
http://subscribe.ru/author/9810
E-mail: slavnikov***@c*****.by
Mobile: (+375 29) 629-30-43
ICQ: 115041944

Ответить   "Dmitry V. Slavnikov" Tue, 29 Jan 2008 03:11:01 +0200 (#721274)

 

Причин несколько.
1. Написание шаблонов - довольно кропотливое занятие, особенно для новичков
(к коим на 90% принадлежу и я), где одна единственная ошибка приведет к
долгим ее поискам в шаблоне (точнее, может привести).
2. Говорят, что регулярки сильно грузят сервер.
3. Ваша задача из тех, где легче обойтись "классическими" приемами - прямой,
скажем так, обработкой текста, поскольку тот текст, который нужно найти
имеет достаточно строгий формат. А регулярки используются при менее четких
критериях.

Я просто закрыл круглую скобку не в том месте.
while(substr($s,0,1)=='=')$s=substr($s,1);

Ответить   Вадим Шешунов Tue, 29 Jan 2008 11:03:15 +0200 (#721375)

 

Доброе утро, Вадим!

29.01.2008 Вы написали мне письмо:
mid:20080129120551.7213***@c*****.subscribe
Тема: "Re[5]: Регулярные выражения (RegExp'ы): нужна консультация"

Вадим, спасибо!
Я подкорректировал Ваш код (пару синтаксичеческих очепяток).
Код работает, но не на всех варантах!

Варианты "живые" я выложил здесь (18 файлов):
http://soros.cima.ru/temp/01.txt
...
http://soros.cima.ru/temp/18.txt

Скрипт в некоторых случаях пытается "откусить" лишнюю часть в начале
текстов. В частности, он не справился с файлами с номерами:
04, 05, 06, 07, 08, 09, 10, 11, 12, 14, 15, 16, 17, 18
хуже всего скрипт обошелся с текстом 12, 14, 15, 18

У меня есть работающий на всех "живых" примерах RegExp, который
составила уважаемая Наталья Сысоева.

Если интересно решить эту задачку не регэкспом, то буду рад получить
от Вас очередное письмо с идеями по этому поводу. В любом случае, как
и обещал, отключу Вам субскрайбовскую рекламу на год. На какой е-мэйл
отключать (можно это сообщить в личку).

--
29.01.2008 - 11:23

С уважением, Славников Дмитрий
http://subscribe.ru/author/9810
E-mail: slavnikov***@c*****.by
Mobile: (+375 29) 629-30-43
ICQ: 115041944

Ответить   "Dmitry V. Slavnikov" Tue, 29 Jan 2008 11:59:25 +0200 (#721388)

 

Дмитрий, я попозже "прокачу" ваши данные на скрипте (вероятно, его
доотладить нужно).
А насчет отключения рекламы можете не беспокоится - для меня это далеко не
критичный вопрос.-)))))))
С уважением.
Вадим Шешунов.

Ответить   Вадим Шешунов Tue, 29 Jan 2008 12:23:04 +0200 (#721393)

 

Да, Дмитрий, вынужден признать, что использование регулярки в вашем случае,
видимо, найлучший выход. Дело в том, что в тех документах, которые мой
скрипт не захотел обрабатывать, их структура несколько отличается от вами
описанной - тот случай, который я назвал "нечетким".
С уважением.
Вадим Шешунов.

Ответить   Вадим Шешунов Tue, 29 Jan 2008 14:58:34 +0200 (#721416)

 

Написал я вам регулярку!

Проверил только на первых 5 примерах.. А также 12 и 14 :) Времени
просто нет дальше.. Думаю везде будет работать. Где-то не сработает -
дайте пример, я переделаю..

Вот весь код на ПХП:
<?php

$St = file_get_contents("http://soros.cima.ru/temp/05.txt");
if (preg_match("~subscribe\.ru[ \n\r\t]*=+[ \n\r\t](.*?)[
\n\r\t]-\*--~is",$St,$P)) echo trim($P[1]);

Сама регулярка: "~subscribe\.ru[ \n\r\t]*=+[ \n\r\t](.*?)[ \n\r\t]-\*--~is"

Теперь, просто зов души...
1. Забудьте в ПХП функции ereg, И.т.д... Используйте ТОЛЬКО PCRE и
preg_.. На больших шаблонах они в 10 РАЗ БЫСТРЕЕ РАБОТАЮТ! Проверял
лично.. ereg - это какая-то йухня...
2. Неужели мой код грамозднее, чем тот с strpos, substr,
str_repeat?... Регулярки ПРОСТЫЕ! Они МАСШТАБИРУЕМЫЕ! Легко
изменяются! Легко ПОНИМАЮТСЯ.. Попробуйте по строковым функциям сразу
понять что происходить...
3. Регулярки грузят сервер, при обработке больших документов. И то,
PCRE грузит сервак намного меньше.. У меня при обработке "нагруженной"
регуляркой хтмлек, размером в 2 мегабайта в 20 потоков не перегружал
сервак в Селерон 2.0 :-) Хотя всё тут относительно... При обраотке
таких писем - проблем не будет вообще. (:

P.S. Учить Регулярки! Это мега-крутая штука! (:

Ответить   Tue, 29 Jan 2008 19:39:02 +0200 (#721693)