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