RegEx: наименьшее возможное совпадение или несжатое совпадение - PullRequest
80 голосов
/ 17 декабря 2009

Как мне сообщить RegEx (версия .NET), чтобы получить наименьшее допустимое совпадение вместо наибольшего?

Ответы [ 3 ]

156 голосов
/ 17 декабря 2009

Для регулярного выражения, такого как .* или .+, добавьте знак вопроса (.*? или .+?), чтобы соответствовать как можно меньшему числу символов. Для опционального совпадения с разделом (?:blah)?, но без сопоставления, если в этом нет крайней необходимости, используйте что-то вроде (?:blah){0,1}?. Для повторяющегося совпадения (с использованием синтаксиса {n,} или {n,m}) добавьте знак вопроса, чтобы попытаться сопоставить как можно меньше (например, {3,}? или {5,7}?).

Документация по квантификаторам регулярных выражений также может быть полезна.

61 голосов
/ 17 декабря 2009

Нежадный оператор, ?. Вот так:

.*?
30 голосов
/ 31 января 2014

Не жадный оператор не означает самое короткое совпадение:

abcabk

a.+?k будет соответствовать всей строке (в этом примере) вместо только трех последних знаков.

Вместо этого я бы хотел найти наименьшее возможное совпадение.

Это последнее возможное совпадение для 'a', чтобы разрешить все совпадения для k.

Полагаю, единственный способ сделать это - использовать выражение вроде:

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