Регулярное выражение: наименьшее возможное совпадение или несоответствие
Как я могу сказать RegEx (версия .NET), чтобы получить наименьшее допустимое совпадение вместо самого большого?
3 ответа:
для регулярного выражения, как
.*
или.+
добавить вопросительный знак (.*?
или.+?
), чтобы соответствовать как можно меньше символов. Чтобы дополнительно соответствовать разделу(?:blah)?
но без сопоставления, если это абсолютно необходимо, используйте что-то вроде(?:blah){0,1}?
. Для повторяющегося матча (либо с помощью{n,}
или{n,m}
синтаксис) добавьте знак вопроса, чтобы попытаться соответствовать как можно меньше (например,{3,}?
или{5,7}?
).документация на регулярное выражение кванторы также может быть полезным.
не жадный оператор не означает кратчайшее возможное совпадение:
abcabk
a.+?k
будет соответствовать всей строке (в этом примере) вместо только последних трех знаков.Я хотел бы на самом деле найти наименьшее возможное совпадение вместо этого.
Это последний возможный матч для'
a
' разрешить все матчи заk
.Я думаю, что единственный способ сделать это-использовать выражение например:
a[^a]+?k