Имеет ли значение жадность регулярного выражения после того, как все необходимые совпадения были использованы? - PullRequest
0 голосов
/ 09 февраля 2011

Название в значительной степени говорит само за себя.

У меня есть регулярное выражение, которое мне нужно для сопоставления имен виртуальных машин из массива.

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

/^(?<id> \d+)\s+(?<name> .+?)\s+\[.+\]/mx

После того, как сопоставлена ​​последняя группа захвата, у меня нет необходимости в оставшихся кадрах, кроме как использовать их, чтобы остановить совпадение в правильном месте, чтобы все символы в группе захвата были правильно сопоставлены.Имеет ли значение, насколько жадны левые кадры, если они не используются?

Вот пример строки, которую я сопоставляю, это перед совпадением.

432    TEST Box åäö!"''*#   [Store] TEST Box +w6XDpMO2IQ-_''_+Iw/TEST Box +w6XDpMO2IQ-_''_+Iw.vmx   slesGuest         vmx-04

Вотпример, если строка, с которой я сопоставляюсь, это после совпадения.

432    TEST Box åäö!"''*#

Как я спрашиваю выше, если мне нужны только первые 2 группы захвата, имеет ли значение, насколько жадна незафиксированная часть в конце?

1 Ответ

1 голос
/ 09 февраля 2011

Не будет никакой разницы между \s+ и \s+?, пока предыдущий квантификатор .+? остается ленивым;он всегда будет соответствовать как минимум одному пробелу и расширяться по мере необходимости до следующего [.

. Сначала я сказал, что может быть разница между \[.+\] и \[.+?\], если имеется более одной пары элементов данных.может происходить на одной линии.В этом случае первое совпадет слишком сильно.Но я только что заметил, что вы привязали свое регулярное выражение к началу строки.Так что нет, в этом случае это тоже не имеет значения.

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