Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Regex101 vs Oracle Regex

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).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instalasi Oracle 12c gagal mengakses lokasi sementara

  2. Oracle LISTAGG() untuk beberapa atribut?

  3. Apa cara terbaik untuk menentukan versi klien Oracle yang saya jalankan?

  4. Pisahkan string dengan spasi dan karakter sebagai pembatas di Oracle dengan regexp_substr

  5. Substring menggunakan Oracle Ketika ada beberapa Kecocokan?