Как сообщить RegEx (.NET-версия), чтобы получить наименьшее допустимое соответствие вместо самого большого?RegEx: наименьшее возможное совпадение или неправильное соответствие
ответ
Для регулярного выражения, как .*
или .+
, добавьте знак вопроса (.*?
или .+?
), чтобы соответствовать, как несколько символов, насколько это возможно. Для необязательного соответствия разделу (?:blah)?
, но без согласования, если это абсолютно необходимо, используйте что-то вроде (?:blah){0,1}?
. Для повторяющегося соответствия (либо с использованием {n,}
, либо {n,m}
) добавьте вопросительный знак, чтобы попытаться соответствовать как можно меньше (например, {3,}?
или {5,7}?
).
Документация по адресу regular expression quantifiers также может быть полезна.
Нежирный оператор, ?
. Как так:
.*?
НЕРАСПРОСТРАНЕНИИ жадный оператор не означает кратчайшее матч:
abcabk
a.+?k
будет соответствовать всей строке (в данном примере), вместо того, чтобы только последние три знака.
Я бы хотел найти наименьшее возможное совпадение.
Это последний возможный матч для 'a
', чтобы еще разрешить все совпадения для k
.
Я думаю, единственный способ сделать это состоит в использовании выражения, как:
a[^a]+?k
Или выполните поиск в обратном порядке, начиная с конца, когда совпадения вложены: «(ab (abk) bk»). – LBogaardt
@ LBogaardt как бы искать в обратном порядке? не получится – azerafati
@LBogaardt Еще открытый вопрос: как искать в обратном порядке? Допустим, я хочу получить «такси». Если мой ввод 'caaacab' и я ищу' a. *? B', он вернет полную строку вместо короткого совпадения внутри. Как мне искать назад от 'b'? – C4u
- 1. Наименьшее возможное совпадение/nongreedy regex search
- 2. Регулярное выражение, чтобы найти наименьшее возможное совпадение
- 3. Загрузка XML, возможное неправильное пространство имен или неправильное выполнение?
- 4. C - Получите наименьшее возможное число со знаком
- 5. Regex: Соответствие эксклюзивному либо/или
- 6. Increment double by наименьшее возможное значениеTest
- 7. Регулярное выражение неправильное соответствие
- 8. Соответствие RegEx не работает
- 9. vim regex & highlight синтаксис: найти совпадение и игнорировать его соответствие
- 10. Соответствие Regex Отрицательные значения
- 11. Как получить возможное совпадение совпадений в строке
- 12. Доступ к запросу Совпадение наименьшее неиспользованное число
- 13. Regex соответствие PHP
- 14. Regex ленивое соответствие внутри группы?
- 15. Javascript RegEx частичное совпадение
- 16. Regex LookAhead ограничивает одно (или первое совпадение)
- 17. C# regex: как сделать совпадение ИЛИ?
- 18. Точное/буквенное слово или шаблонное совпадение regex
- 19. неправильное совпадение URL-адреса IIS
- 20. Неправильное совпадение правил согласования отключения?
- 21. регулярное выражение и найти наименьшее соответствие фразы
- 22. Соответствие R regex @nickname, stringr или grep
- 23. python regex соответствие словам «ab» или «ba»
- 24. Python Regex соответствие с или без
- 25. Недопустимое неправильное соответствие символу/int
- 26. Regex нечеткое совпадение слов
- 27. Regex Соответствие URL
- 28. Perl: Regex соответствие дополнительных строк
- 29. Соответствие определенных частей строки или совпадение всей строки
- 30. Regex соответствие смайлики
Я не знаю, если я только один с этим недоразумением, но важно отметить: Хотя верно, что не-жадный оператор будет соответствовать как можно большему количеству символов, он все равно может не совпадать с тем, что он ищет. «Как можно меньше символов» не соответствует «кратчайшему возможному совпадению» в отношении стандартов RegEx. См. Ответ ниже моего комментария: с помощью 'abcabk' и' a. +? K' RegEx будет соответствовать всей строке. – Jayjayyy