![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
Иногда, если регулярное выражение составлено неправильно или плохо, время выполнения метода может быть очень долгим.
Как-нибудь можно ограничить его по какому-нибудь параметру? По времени или по количеству рекурсий? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
А разве дотнетовский движок поддерживает рекурсивные регекспы? Вообще существуют условные конструкции, но не думаю, что из них можно что-то подобное вытащить. Скорее всего тут надо вместо метода Matches использовать Match и вытягивать по одному соответствию, а все ограничения вводить в коде(имхо). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
Я имел в виду неотъемлемую рекурсивность "регекспов". Система же пытается то так, то сяк сопоставить, а при неудаче возвращается на исходные позиции. Вполне можно написать выражение, которое будет перебираться очень долго.
Мне надо именно Matches. Хотел быстренько написать регексп-дебаггер, да вот завис на этом интересном вопросе. Как это так, нельзя ограничить время выполнения метода? Может, есть какой-нибудь инвоук для этого? Сейчас делаю поток, который можно будет убивать. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
При помощи Match можно реализовать ту же функциональность. Среди перегрузок этого метода есть такая, в которой можно указать с какого индекса начинать просмотр строки. То есть найдя соответствие можно при следующем вызове идти дальше. В промежутках можно проверять любые условия и при необходимости остановить просмотр. А на счёт встроенных возможностей я сомневаюсь. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
Заменив Matches на Match, мы понизим время в N раз. А там рост экспоненциальный. То есть, выигрыш будет сомнительный.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Это надо проверять опытным путём. С регекспами так навскидку ничего сказать нельзя. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |