Masalahnya diketahui oleh semua orang yang bekerja dengan implementasi perpustakaan regex Henry Spencer:pengukur malas tidak boleh dicampur dengan pengukur serakah dalam satu dan cabang yang sama karena itu mengarah pada perilaku yang tidak terdefinisi. Mesin regex TRE yang digunakan di R menunjukkan perilaku yang sama. Meskipun Anda mungkin mencampur quantifier malas dan serakah sampai batas tertentu, Anda harus selalu memastikan Anda mendapatkan hasil yang konsisten.
Solusinya adalah hanya menggunakan penghitung malas di dalam grup penangkap:
select REGEXP_REPLACE('+000099,8420000', '^\+?(-?)0*([0-9]+?,[0-9]+?)0*$','\1\2') as Result from dual
Lihat demo online
[0-9]+?,[0-9]+?
bagian cocok dengan 1 atau lebih digit tetapi sesedikit mungkin diikuti dengan koma dan kemudian 1 atau lebih digit, sesedikit mungkin.
Beberapa tes lagi (select REGEXP_REPLACE('+00009,010020','[0-9]+,[0-9]+?([1-9])','\1') from dual
menghasilkan +20
) buktikan bahwa pengukur pertama dalam grup menyetel jenis keserakahan quantifier . Dalam kasus di atas, keserakahan kuantifier Grup 0 diatur ke serakah dengan ?
quantifier, dan Grup 1 (yaitu ([0-9]+?,[0-9]+?)
) jenis keserakahan diatur dengan +?
pertama (yang malas).