Это регулярное выражение экспоненциально? - PullRequest
1 голос
/ 18 августа 2010

Я хотел бы знать, является ли:

/.*(Set-Cookie: (.*))?;.*(<\?xml.*)/

экспоненциальным регулярным выражением.

Спасибо

1 Ответ

4 голосов
/ 18 августа 2010

Это действительно зависит от движка регулярных выражений, но в большинстве движков этот шаблон, вероятно, является полиномом высокой степени (может быть, кубическим или выше), когда нет совпадения.

Вы можете использовать, например, RegexBuddy, чтобы увидеть, сколько шагов требуется, чтобы соответствовать, и что более важно, чтобы не соответствовать определенному вводу. Вы можете использовать это, чтобы оценить, насколько сложным может быть процесс возврата в определенных движках.

Непонятно, что именно вы пытаетесь сделать, но этот шаблон на самом деле мало что делает с подкаталогом Set-Cookie, который может быть необязательным (например, группа может не соответствовать этой строке, даже если она существует, поскольку она необязательна). для начала).

Если вы пытаетесь разобрать XML, то, пожалуйста, пожалуйста, не используйте регулярные выражения. Существует множество синтаксических анализаторов XML на большинстве современных языков, и они не только подойдут для работы, но и будут правильными и гораздо более приятными для работы, чем регулярные выражения.

Ссылки

Похожие вопросы


Узор, развенчанный

Чтобы указать, почему этот шаблон не «работает» (что делает его неактуальным, быстрым или медленным), рассмотрим следующий ввод:

Set-Cookie: NOMNOMNOM;<?xml

С шаблоном /.*(Set-Cookie: (.*))?;.*(<\?xml.*)/ вся строка соответствует, но группа 1 не захватывает Set-Cookie: NOMNOMNOM, а группа 2 не захватывает NOMNOMNOM (, как видно на rubular.com ). Это связано с тем, что ведущий .* сожрал cookie, а поскольку подшаблон cookie является необязательным, он все равно совпадает.

Мы можем попытаться «исправить» это, сделав ведущий .* неохотно как .*?. Теперь группа 1 может совпадать с Set-Cookie, что, возможно, является намерением все время (, как видно на rubular.com ).

Однако это вряд ли улучшение. Вы действительно не хотите идти в этом направлении. С этим регулярным выражением по-прежнему много проблем, и просто заставить его работать правильно будет очень сложно, если не почти невозможно.

Следует отметить, что данный шаблон соответствует ";<?xml" (, как видно на rubular.com ). То есть, пока в строке есть ;, а затем <?xml, шаблон будет совпадать. Не ясно, действительно ли этот паттерн делает что-нибудь полезное.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...