2016-08-19 5 views
1

У меня возникает проблема с шаблоном регулярного выражения, если совпадение не найдено.Проблема с катастрофическим возвратом

Узор регулярное выражение, которое я использую:

^(?:".*?",){4}"(?:.*?)Cookie:\s(?:.*?)Routing=(.*?); 

В тестовых данных я использую что-то в подобных:

"a","b","c","d","POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; routxing=yyyy;"x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x", 

Когда параметр «маршрутизации» найден, все работает хорошо. Однако, когда параметр маршрутизации не найден, исключив его из тестовых данных, регулярное выражение продолжает поиск. Я узнал по другим сообщениям, что это вызвано катастрофическим отступлением, но я не могу найти способ избежать этого.

+4

Хорошим способом начать было бы изменить ''. *? "' На '" [^ "] *" '. –

+0

Что вы на самом деле хотите найти? –

+1

Поскольку вы уже знаете, где искать, извлекать 5-я строка с котировкой, и после проверки, содержит ли она то, что вы хотите. –

ответ

2

Сужение вопроса:

Как избежать катастрофических откатов?

Regex сторона: Будьте как можно более конкретным, поскольку Rawing сказал в своем комментарии, изменение ".*?" к "[^"]*" будет резко снизить количество требуемых BackTrack для двигателя.

Место ввода: если возможно, уменьшите ввод до наименьшей требуемой части, не теряя информацию. Здесь, изменяя входные данные из:

"a","b","c","d","POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; routxing=yyyy;"x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x","x", 

в

"POST: /portal/start.asp HTTP/1.1\r\nHost: myhost\r\nCookie: w1n0_er=xxxx; Routing=yyyy;" 

и регулярное выражение для:

^".*?Cookie:\s.*?Routing=(.*?); 

поможет много.

 Смежные вопросы

  • Нет связанных вопросов^_^