Forum Webscript.Ru

Программирование => Регулярные выражения => Тема начата: Bardel от 27 Марта 2004, 14:37:34

Название: Помогите с парсером
Отправлено: Bardel от 27 Марта 2004, 14:37:34
Есть набор строк:
35545fgfg
344dd
8688646dg
Как вырезать что между
Писал:
(?:([0-9]{1,4}<\\/td>){1,4})(?:)([\\S]{1,4})(?:<\\/B><\\/td>)
что то не получается

Как задавать сложные условия выбора
например как сказать на языке рэгов:
может идти или



Писал:
/(?:";

@ar = $s =~ m!!ig;

#результат
$,=" "; print @ar[0,1,-1];

Можна ли создавать варианты очень большие по обьему?
Название: Помогите с парсером
Отправлено: Макс от 27 Марта 2004, 15:41:44
Цитировать
Bardel:
Как вырезать что между

/([^<>]+?)/
Название: Помогите с парсером
Отправлено: Yukko от 28 Марта 2004, 11:02:37
Макс
 Если ты ограничиваешь РВ слешами, то наверное, слеш внутри надо проескейпить:
<\\/b> иначе нарвешься на предупреждение:
Warning: Unknown modifier \'b\' in ...
и вопросительный знак после плюса абсолютно лишний! Посмотри сам на РВ и поймешь почему.
Название: Помогите с парсером
Отправлено: Yukko от 28 Марта 2004, 11:06:43
Bardel и другие
отключайте пожалуйста смайлики в форме отправки сообщения, чтобы люди не гадали, что там написано...
Название: Помогите с парсером
Отправлено: Bardel от 30 Марта 2004, 10:15:30
Извините, я кажется не совсем правильно сформулировал задачу:
строки такого типа:
Эта инфа мне нужнаИ эта инфа мне ужнаНет355Нет45Да fgfg
Эта инфа мне нужнаИ эта инфа мне ужнаНет344Да dd
Эта инфа мне нужнаИ эта инфа мне ужнаНЕТ868НЕТ86НЕТ46Да dg
)(([\\S\\s]{1,20})(?:<\\/td>)([\\S\\s]{1,20})(?:<\\/td>)(?:([0-9]{1,3}<\\/td>){1,4})(?:)([\\S]{1,4})(?:<\\/B><\\/td>)

В итоге я должен получить такие строки:
Эта инфа мне нужна     И эта инфа мне ужна    Да fgfg
Эта инфа мне нужна     И эта инфа мне ужна    Да dd
Эта инфа мне нужна     И эта инфа мне ужна    Да dg

Тоесть - /([^<>]+?)/ это не совсем то что надо.  В моей ситуации тэгов
Нет, может быть от одного до 5, тоесть не подойдет и такой  такой  код :  ...то что мне надо...(?:[\\s\\S]{1,30})(?:)([\\S]{1,4}).........
Название: Помогите с парсером
Отправлено: USE от 30 Марта 2004, 10:48:59
Bardel ты бы сформулировал нормально задачу, чтобы можно было что-то понять. ты дай это кому-то прочитать, если это кто-то поймет, то он герой!
Название: Помогите с парсером
Отправлено: Yukko от 30 Марта 2004, 11:33:26
Цитировать
Bardel:
то что мне надо...(?:[\\s\\S]{1,30})(?:
)([\\S]{1,4}).........

т.е. ты уже свою задачу решил?
Название: Помогите с парсером
Отправлено: USE от 30 Марта 2004, 15:46:42
Bardel, ты лучше расскажи зачем тебе это делать? это куда интереснее.
Название: Помогите с парсером
Отправлено: Bardel от 31 Марта 2004, 10:25:22
Давайте я екще раз опишу задачу:
есть файл с таблицами 3х типов(4 ячейки, 6ячеек, 8 ячеек)
нужно вырезать первые 2 ячейки и последнюю. Как это сделать 1 регулярным выражением
Ниже привожу таблицы:
Таблица1:




Pole1Pole2Pole3Pole4


Таблица2:




Pole1Pole2Pole3Pole4Pole5Pole6


Таблица3:




Pole1Pole2Pole3Pole4Pole5Pole6Pole7Pole8


Все ячейки могут содержать как символы так и цифры. Вот такая задача

Цитировать
Bardel, ты лучше расскажи зачем тебе это делать? это куда интереснее.

Я хочу вырезать всю информацию по букмекерской линии сайта zebrabet.com(коэфициенты)
Название: Помогите с парсером
Отправлено: USE от 31 Марта 2004, 11:54:02
Цитировать
Bardel:
Как это сделать 1 регулярным выражением

Попробуй сделать это сначана тремя выражениями, а потом будешь оптимизировать.
Название: Помогите с парсером
Отправлено: Bardel от 31 Марта 2004, 14:55:02
Цитировать
Попробуй сделать это сначана тремя выражениями, а потом будешь оптимизировать.



Это я знаю
1. /(?:
)([\\S]{1,4})(?:\\/td>)([\\S]{1,4})(?:[\\S\\s]{1,20})([\\S]{1,4})(?:<\\/B><\\td><\\tr>)/

2. /(?:
)([\\S]{1,4})(?:\\/td>)([\\S]{1,4})(?:[\\S\\s]{1,40})([\\S]{1,4})(?:<\\/B><\\td><\\tr>)/

3. /(?:
)([\\S]{1,4})(?:\\/td>)([\\S]{1,4})(?:[\\S\\s]{1,60})([\\S]{1,4})(?:<\\/B><\\td><\\tr>)/

Какк эти з выражения заменить одним?
Название: Помогите с парсером
Отправлено: Bardel от 31 Марта 2004, 15:24:47
Тоесть по сути можна обойтись и 3 вариантом, но как сделать по другому чтобы конкретно не привязываться к [\\S\\s]{1,60}. Меня интерисует именно это
Название: Помогите с парсером
Отправлено: mike от 31 Марта 2004, 16:19:28
Вариант решения на Perl...
$s= "
Pole1Pole2Pole3Pole4Pole5Pole6Pole7Pole8(?:)?(\\S+?)(?:)?