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

Поиск:

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


Эксперт
***


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

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



Иногда, если регулярное выражение составлено неправильно или плохо, время выполнения метода может быть очень долгим. 

Как-нибудь можно ограничить его по какому-нибудь параметру? По времени или по количеству рекурсий?
PM MAIL   Вверх
diadiavova
Дата 10.12.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Dims @  10.12.2009,  19:55 Найти цитируемый пост)
По времени или по количеству рекурсий? 

А разве дотнетовский движок поддерживает рекурсивные регекспы?

Вообще существуют условные конструкции, но не думаю, что из них можно что-то подобное вытащить. Скорее всего тут надо вместо метода Matches использовать Match и вытягивать по одному соответствию, а все ограничения вводить в коде(имхо).


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


Эксперт
***


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

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



Я имел в виду неотъемлемую рекурсивность "регекспов". Система же пытается то так, то сяк сопоставить, а при неудаче возвращается на исходные позиции. Вполне можно написать выражение, которое будет перебираться очень долго. 

Мне надо именно Matches. Хотел быстренько написать регексп-дебаггер, да вот завис на этом интересном вопросе. 

Как это так, нельзя ограничить время выполнения метода? Может, есть какой-нибудь инвоук для этого?

Сейчас делаю поток, который можно будет убивать.
PM MAIL   Вверх
diadiavova
Дата 10.12.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Dims @  10.12.2009,  20:34 Найти цитируемый пост)
Мне надо именно Matches.

При помощи Match можно реализовать ту же функциональность. Среди перегрузок этого метода есть такая, в которой можно указать с какого индекса начинать просмотр строки. То есть найдя соответствие можно при следующем вызове идти дальше. В промежутках можно проверять любые условия и при необходимости остановить просмотр. 
А на счёт встроенных возможностей я сомневаюсь.


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


Эксперт
***


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

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



Заменив Matches на Match, мы понизим время в N раз. А там рост экспоненциальный. То есть, выигрыш будет сомнительный.
PM MAIL   Вверх
diadiavova
Дата 10.12.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Dims @  10.12.2009,  21:20 Найти цитируемый пост)
Заменив Matches на Match, мы понизим время в N раз. А там рост экспоненциальный. То есть, выигрыш будет сомнительный. 

Это надо проверять опытным путём. С регекспами так навскидку ничего сказать нельзя.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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