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

Ekspresi Reguler (RegEx) untuk IPv6 Terpisah dari IPv4

Dengan banyak bantuan dari @nhahtdh dalam jawaban ini https://stackoverflow.com/a/21943960/3112803 Saya telah menemukan memecahnya menjadi solusi terbaik. Di bawah ini adalah contoh bagaimana melakukannya di PL/SQL , tapi itu bisa dilakukan dengan cara ini dalam bahasa lain. Saya akan melakukan hal yang sama di ColdFusion . Untuk PL/SQL pola yang dibutuhkan untuk tetap di bawah 512 karakter sehingga memecahnya berfungsi dengan baik dan mudah dimengerti. Itu melewati semua kasus pengujian saya di pertanyaan awal.

if (
    /* IPv6 expanded */
    REGEXP_LIKE(v, '\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\z')
    /* IPv6 shorthand */
    OR (NOT REGEXP_LIKE(v, '\A(.*?[[:xdigit:]](:|\z)){8}')
    AND REGEXP_LIKE(v, '\A([[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){0,6})?::([[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){0,6})?\z'))
    /* IPv6 dotted-quad notation, expanded */
    OR REGEXP_LIKE(v, '\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){5}:(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}\z')
    /* IPv6 dotted-quad notation, shorthand */
    OR (NOT REGEXP_LIKE(v, '\A(.*?[[:xdigit:]]:){6}')
    AND REGEXP_LIKE(v, '\A([[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){0,4})?::([[:xdigit:]]{1,4}:){0,5}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}\z'))
) then


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghasilkan UUID versi 4 (acak) di Oracle?

  2. Oracle 10g menerima 5 digit tahun dalam satu Tanggal

  3. ORA-38868

  4. ORA-1114 Menjalankan Datapatch

  5. Oracle Database Explorer:Pelatihan dan Akreditasi Gratis