Forum Webscript.Ru

Программирование => Регулярные выражения => Тема начата: abra от 22 Декабря 2008, 19:47:02

Название: Помогите найти ошибку.
Отправлено: abra от 22 Декабря 2008, 19:47:02
Доброго времени суток

Имею на странице 2 пары тагов . Нужные мне данные находятся между первой парой.
 
 (.+?)
 
Не срабатывает. Более того, когда я пытаюсь подобрать правильное выражение с помощью онлайн генератора, как только я заношу в скобки значения, совпадения сразу пропадают.
Название: Помогите найти ошибку.
Отправлено: hanslinger от 22 Декабря 2008, 22:48:14
А избавиться от двух нельзя? Нехорошо это.
Название: Помогите найти ошибку.
Отправлено: arto от 23 Декабря 2008, 10:26:53
# cat > /tmp/test.html


Test


Body A


Body B


# perl -le \'my $file = do { local $/; }; $file =~ m#(.+?)#sm && print $1\' < /tmp/test.html

Body A

#
Название: Помогите найти ошибку.
Отправлено: abra от 23 Декабря 2008, 11:37:31
hanslinger
 в смысле "избавиться от двух"?.......

arto я с перлом не дружу........ мне б на с#. В любом случае, если я привильно понимаю, это то же выражение. Или нет?

(.+?) выбирает обе пары.

Как мне только  выдернуть только то, что между первой парой стоит? Т.е. сами теги body мне не нужны.
Название: Помогите найти ошибку.
Отправлено: arto от 23 Декабря 2008, 12:47:00
нет.
как видите, выбирает содержимео первой пары.

учить c# влом.
Название: Помогите найти ошибку.
Отправлено: abra от 23 Декабря 2008, 13:17:28
arto
да я в общем то и не прошу учить :о), но и видеть, что ваш пример выбирает только то, что мне нужно, я не вижу именно по причине своего не знания перла......

Было бы здОрово, если б вы само исправленное выражение написали, без сопровождающего кода, что б было видно где у меня косяк.

... Я уж и просить боюсь о кратких комментариях необходимых дополнений...
Название: Помогите найти ошибку.
Отправлено: hanslinger от 23 Декабря 2008, 14:13:38
Я имел в виду то, что не должно быть двух body на странице. По идее.
Название: Помогите найти ошибку.
Отправлено: arto от 23 Декабря 2008, 15:45:39
я не знаю синтаксиса регулярных выражений в c#.
он может отличаться от perl

попробуйте (?sm)(.+?), результат должен быть в группе 1
Название: Помогите найти ошибку.
Отправлено: abra от 23 Декабря 2008, 16:02:47
arto во-о-от...... Спасибо. Теперь картина проясняется.

 (?sm) это флаги Multiline и Dot all Mode?
Название: Помогите найти ошибку.
Отправлено: arto от 23 Декабря 2008, 16:33:59
да. можете добавить i
Название: Помогите найти ошибку.
Отправлено: abra от 23 Декабря 2008, 16:48:09
Понятно.
Простите за назойливость, но не подскажите что отвечает за влючение/исключение значений в выборку?

 Например как выглядело бы то же выражение, если бы мне надо было исключить из выборки и включить ? Понимаю, что в данной ситуации вопрос бредовый, но для примера  подойдет.
Название: Помогите найти ошибку.
Отправлено: arto от 23 Декабря 2008, 17:17:39
(.+?)

по регулярным выражениям подойдет книжка фридла, второе или третье издание, либо
perldoc perlre, perldoc perlretut для перловых выражений.
Название: Помогите найти ошибку.
Отправлено: abra от 23 Декабря 2008, 17:45:29
спасибо. Как тут вам рейтинг можно поднять? :о)
Название: Помогите найти ошибку.
Отправлено: CGVictor от 24 Декабря 2008, 07:54:13
Цитировать
hanslinger: По идее.


hanslinger, мы с тобой одиноки в этом мире (ц)

Тема закрыта.