Bagaimana cara memberi tahu RegEx (versi .NET) untuk mendapatkan kecocokan valid terkecil, bukan yang terbesar?
.net
regex
regex-greedy
non-greedy
Jonathan Allen
sumber
sumber
abcabk
dana.+?k
, RegEx akan mencocokkan seluruh string.Operator yang tidak serakah
?
,. Seperti:sumber
Operator non serakah tidak berarti pertandingan yang sesingkat mungkin:
a.+?k
akan cocok dengan seluruh string (dalam contoh ini), bukan hanya tiga tanda terakhir.Saya ingin benar-benar menemukan kecocokan sekecil mungkin.
Itu adalah kemungkinan kecocokan terakhir untuk '
a
' untuk tetap mengizinkan semua kecocokank
.Saya kira satu-satunya cara untuk melakukannya adalah dengan menggunakan ekspresi seperti:
Tampilkan cuplikan kode
sumber
cab
. Jika masukan sayacaaacab
dan saya mencarinyaa.*?b
akan mengembalikan string lengkap, bukan kecocokan pendek di dalamnya. Bagaimana saya menelusuri mundur darib
?START[^START]*?END
(START dan END adalah regex karakter awal dan akhir Anda). Ini pada dasarnya berarti "mencocokkan apa pun dari MULAI hingga AKHIR di mana karakter di antara tidak menyertakan MULAI lagi"