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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Regex - как захватить пока не встретится тег? 
V
    Опции темы
Dims
Дата 4.12.2008, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Я пишу регексп для захвата содержимого HTML-тегов. Мне надо захватить, допустим, содержимое тега <TD>

Я написал так:

Код

[^<]*<td[^>]*>([^<]*)[^<]*<\td[^>]*>


это работает до тех пор, пока внутри TD не встретится какая-нибудь HTML-разметка, поскольку [^<] прекращает сопоставление при встречании открывающего уголка.

Как мне сделать, чтобы сопоставление прекращалось только по закрывающему тегу?

Добавлено через 2 минуты и 5 секунд
P.S. То есть, нужно какое-нибудь выражение, которое проверяет не символ или класс символов, а их последовательность.

Может, как-то надо применить

Код

(?!subexpression)


Только не пойму, как.

PM MAIL   Вверх
jonie
Дата 4.12.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Код

<td.*?>(.*?)</td
с# тут при чем ?!


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Dims
Дата 4.12.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Форум посвящён не только C#, но и .NET вообще.
PM MAIL   Вверх
jonie
Дата 4.12.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



и при чем тут .net ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Dims
Дата 4.12.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Это вопрос по .NET Framework Regular Expressions. 

Завтра ещё один минус поставлю.
PM MAIL   Вверх
Dims
Дата 4.12.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Не пойму, почему вот такая конструкция

Код

<td[^>]*>.*(?:</td>)


помечает весь кусок от первого тега <td> до последнего </td>.

Почему она не прерывается на первом из многочисленных </td>?
PM MAIL   Вверх
jonie
Дата 4.12.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



ты пробывал то, что я предложил в посте 2 ? (за который ты мне минус влепил) или ты тупо не читаешь че пишут?)

Цитата

Это вопрос по .NET Framework Regular Expressions
бред. никакого тут .net -а нету.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
diadiavova
Дата 4.12.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Если стоит вопрос парсинга HTML вообще, а не при помощи регекспов в частности, тогда рекомендую взглянуть сюда.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Rififi
Дата 4.12.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Цитата(Dims @  4.12.2008,  13:31 Найти цитируемый пост)
Не пойму, почему вот такая конструкция

Выделить всёБез подсветки
1:
    
<td[^>]*>.*(?:</td>)


помечает весь кусок от первого тега <td> до последнего </td>.

Почему она не прерывается на первом из многочисленных </td>? 

потому что регэксп жадный
PM MAIL   Вверх
Dims
Дата 4.12.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Цитата(jonie @  4.12.2008,  15:04 Найти цитируемый пост)
ты пробывал то, что я предложил в посте 2 ? (за который ты мне минус влепил) или ты тупо не читаешь че пишут?)

А, ты что-то предлагал! Извини, не заметил, думал классический случай самовольного модерирования.
Ладно, завтра поставлю плюс.

Цитата(jonie @  4.12.2008,  15:04 Найти цитируемый пост)
бред. никакого тут .net -а нету.

У .НЕТ-а есть свой регексп процессор, синтаксис языка которого слегка отличается от других.

Добавлено через 6 минут и 57 секунд
В общем, проблему я решил сам, написав вот такой регексп:

Код

<td[^>]*>(?:(?!</td>|<td)((?:.(?!</td>|<td))*.)</td>|</td>)


Он вытаскивает содержимое всего элемента TD, допуская в нём любые подэлементы, кроме самого TD.

Его смысл выявляется, когда он работает внутри других регекспов, задающих паттерн распознаваемой таблицы. 
PM MAIL   Вверх
gambit
Дата 5.12.2008, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Цитата(Dims @  4.12.2008,  11:16 Найти цитируемый пост)
Завтра ещё один минус поставлю. 

Это наезд? Аяй!!

Добавлено через 4 минуты и 9 секунд
Dims, твой минус у jonie убрал.

Это сообщение отредактировал(а) gambit - 5.12.2008, 09:47
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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