Достаточно ли умен Regex, чтобы найти кратчайший путь (если есть), чтобы найти совпадение? - PullRequest
0 голосов
/ 25 января 2019

Я использую некоторые «вычисления по символам», чтобы помочь Regex найти кратчайший путь к совпадению для алгоритма синтаксического анализа, но мне интересно, делает ли это движок C # Regex, и я просто добавляю ненужный код.

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

Будет ли выражение регулярного выражения типа ([0-9A-Za-z]+\s*)= пытаться сначала найти знак равенства? или он запустит это выражение дословно и найдет сначала 0-9A-Za-z char THEN проверку на пробел, THEN проверку на знак равенства?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Большинство движков регулярных выражений являются жадными и стараются максимально соответствовать. Например, если вы вводите «hello world on stack overflow», то [a-z]+\s будет соответствовать до начала «переполнения», то есть «hello world on stack».

Противоположность жадности - ленивый . Если вы используете вход «hello world on stack overflow» в качестве ввода и [a-z]+?\s, он будет соответствовать только «hello».

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

0 голосов
/ 25 января 2019

пробная версия на regexstorm.net предполагает, что regex будет сначала искать группу. пустой поиск знака равенства стоит дешевле, вставьте длинный пример текста, поэтому не можете использовать сокращатель URL-адреса.

Может быть, вы могли бы использовать позитивный взгляд, если он соответствует вашим требованиям. (?<=[0-9A-Za-z]+\s*)= кажется, быстрее, как поиск сначала для знака равенства.

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