Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Снова регулярные выражения! никак не могу в них вьехать... 
:(
    Опции темы
JaguarSmith
  Дата 8.12.2005, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



В кратце - задача которая передо мной стоит сводится к тому чтоб скачать страничку с сайта взять оттуда всё, что в теге <body> выкинуть от туда все скрипты и переформатировать в соответствии со своей таблицей стилей. Решил сделать через регулярные выражения а заодно и разобраться с ними. Т.к. <body> довольно сложный тег он может быть <body> а может быть и <BODY class="body" bottomMargin="0" leftMargin="0" topMargin="0" onload="javascript:Start_Up();" rightMargin="0"> решил начать с более простого тега <head> smile

Код

        ' HTML_text - переменная в которую загружается страничка с сайта...
        Dim _Head as string
        Dim hd As New Regex("<(head|HEAD)(.)*/(head|HEAD)>", RegexOptions.Multiline)
        Dim head_m As Match = hd.Match(HTML_text.Replace(Chr(13), "").Replace(Chr(10), ""))

        If head_m.Success Then
            _Head = head_m.Groups.Item(0).Captures.Item(0).Value
        End If


smile
1) Здесь приходится выкидывать символы перевода сторки (HTML_text.Replace(Chr(13), "").Replace(Chr(10), "")) иначе выражение не работает как можно от этого уйти?
2)Оказалось что выражения чуствительны к регистру поэтому приходится делать такую штуку (head|HEAD) как можно это написать более корректно(например <Head> - пойман не будет)?

Ps. Пишу в этот раздел а не в ASP.NET потому что вопрос связан скорее с бейсиком а не с работой сервера и серверными примочками...
PM MAIL YIM   Вверх
Exception
Дата 9.12.2005, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Имхо, для таких целей лучше использовать специализированные парсеры. Но тогда док должен быть валидным.. что бывает не всегда.
PM   Вверх
JaguarSmith
Дата 9.12.2005, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



Какие парсеры? Где про них можно прочитать/скачать? 8 )

Я вот про них ничего не знаю и работаю с тем что есть - тоесть пишу парсер сам. smile

Да и с регулярными выражовываниями хочется разобраться...


PM MAIL YIM   Вверх
Exception
Дата 9.12.2005, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Ну, например парсер из System.Xml. Но он должен читать только xhtml.
PM   Вверх
rapa
Дата 9.12.2005, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 2.6.2005

Репутация: нет
Всего: нет



Но какоы бы он (тэг <Body>) ни был сложным,мне кажется,что всё что тебе понадобится,находится внутри, т.е. между тэгами <Body> и </Body>.Значит,ты таки можешь построить регуларное выражение по этому принципу.
Начало: "^\<Body\>"
Конец: "\<\/Body\>$"
PM MAIL   Вверх
Дрон
Дата 9.12.2005, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 93



JaguarSmith
Для начала вместо того, чтобы писать head|HEAD -- просто поставь опцию IgnoreCase smile

Код

Dim hd As New Regex("<head(.)*/head>", RegexOptions.Multiline Or RegexOptions.IgnoreCase)


Я бы ещё посоветовал добавлять опцию Compiled -- тогда всё работать будет чуть быстрее.
Добавлено @ 01:40
Цитата(JaguarSmith @ 8.12.2005, 22:55)
Здесь приходится выкидывать символы перевода сторки

И опять же. Попробуй поставить опцию Singleline.

Почитал бы MSDN -- там много полезного про регулярные выражения написано.


--------------------
Да. Именно так.
PM   Вверх
JaguarSmith
Дата 9.12.2005, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



Цитата

Почитал бы MSDN -- там много полезного про регулярные выражения написано.

Да я и читал - но там слишком много всего написано и не очень понятно если не знать с чего начать smile
По этому пришлось на осчупь - мне главно понять как оно используется в принципе а потом можно уже и МСДН читать...

Спасибо большое - очень ценная инфа...

Я бы никогда не догадался про "RegexOptions.Multiline Or RegexOptions.IgnoreCase"... smile
PM MAIL YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.