Як я можу сказати RegEx (.NET версія) отримати найменший дійсний збіг замість найбільшого?
Як я можу сказати RegEx (.NET версія) отримати найменший дійсний збіг замість найбільшого?
Відповіді:
Для регулярного виразу на зразок .*або .+додайте знак питання ( .*?або .+?), щоб відповідати якомога меншій кількості символів. Щоб необов’язково відповідати розділу, (?:blah)?але без відповідності, якщо це абсолютно не потрібно, використовуйте щось подібне (?:blah){0,1}?. Для повторюваного збігу (з використанням {n,}або {n,m}синтаксисом) додайте знак питання, щоб спробувати зіставити якомога менше (наприклад, {3,}?або {5,7}?).
Документація щодо кількісних кількісних показників виразів також може бути корисною.
Нежадібним оператора, ?. Так:
.*?
Не жадібний оператор не означає найкоротший можливий збіг:
abcabk
a.+?k відповідатиме всій рядку (у цьому прикладі) замість лише трьох останніх знаків.
Я хотів би фактично знайти найменший можливий збіг замість цього.
Це останній можливий матч для " a", щоб все-таки дозволити всі матчі k.
Я думаю, єдиний спосіб зробити це - використовувати такий вираз:
a[^a]+?k
cab. Якщо мій внесок є, caaacabі я шукаю a.*?bйого, він поверне повний рядок замість короткого збігу всередині. Як би я шукав назад із b?
START[^START]*?END(де START і END - це ваші регулярні вирази символів початку і кінця). По суті, це означає "
abcabkіa.+?k, RegEx буде відповідати цілому рядку.