Регулярное выражение: наименьшее возможное совпадение или несоответствие


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

3 60

3 ответа:

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

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

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

.*?

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

abcabk

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

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

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

Я думаю, что единственный способ сделать это-использовать выражение например:

a[^a]+?k