| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB .NET > Снова регулярные выражения! |
| Автор: JaguarSmith 8.12.2005, 22:55 | ||
В кратце - задача которая передо мной стоит сводится к тому чтоб скачать страничку с сайта взять оттуда всё, что в теге <body> выкинуть от туда все скрипты и переформатировать в соответствии со своей таблицей стилей. Решил сделать через регулярные выражения а заодно и разобраться с ними. Т.к. <body> довольно сложный тег он может быть <body> а может быть и <BODY class="body" bottomMargin="0" leftMargin="0" topMargin="0" onload="javascript:Start_Up();" rightMargin="0"> решил начать с более простого тега <head>
1) Здесь приходится выкидывать символы перевода сторки (HTML_text.Replace(Chr(13), "").Replace(Chr(10), "")) иначе выражение не работает как можно от этого уйти? 2)Оказалось что выражения чуствительны к регистру поэтому приходится делать такую штуку (head|HEAD) как можно это написать более корректно(например <Head> - пойман не будет)? Ps. Пишу в этот раздел а не в ASP.NET потому что вопрос связан скорее с бейсиком а не с работой сервера и серверными примочками... |
| Автор: Exception 9.12.2005, 00:30 |
| Имхо, для таких целей лучше использовать специализированные парсеры. Но тогда док должен быть валидным.. что бывает не всегда. |
| Автор: JaguarSmith 9.12.2005, 00:46 |
| Какие парсеры? Где про них можно прочитать/скачать? 8 ) Я вот про них ничего не знаю и работаю с тем что есть - тоесть пишу парсер сам. Да и с регулярными выражовываниями хочется разобраться... |
| Автор: Exception 9.12.2005, 00:56 |
| Ну, например парсер из System.Xml. Но он должен читать только xhtml. |
| Автор: rapa 9.12.2005, 01:28 |
| Но какоы бы он (тэг <Body>) ни был сложным,мне кажется,что всё что тебе понадобится,находится внутри, т.е. между тэгами <Body> и </Body>.Значит,ты таки можешь построить регуларное выражение по этому принципу. Начало: "^\<Body\>" Конец: "\<\/Body\>$" |
| Автор: Дрон 9.12.2005, 01:38 | ||||
| JaguarSmith Для начала вместо того, чтобы писать head|HEAD -- просто поставь опцию IgnoreCase
Я бы ещё посоветовал добавлять опцию Compiled -- тогда всё работать будет чуть быстрее. Добавлено @ 01:40
И опять же. Попробуй поставить опцию Singleline. Почитал бы MSDN -- там много полезного про регулярные выражения написано. |
| Автор: JaguarSmith 9.12.2005, 03:22 | ||
Да я и читал - но там слишком много всего написано и не очень понятно если не знать с чего начать По этому пришлось на осчупь - мне главно понять как оно используется в принципе а потом можно уже и МСДН читать... Спасибо большое - очень ценная инфа... Я бы никогда не догадался про "RegexOptions.Multiline Or RegexOptions.IgnoreCase"... |