Di Oracle, REGEXP_SUBSTR()
fungsi mengembalikan substring dari string, berdasarkan pola ekspresi reguler.
Ini memperluas fungsionalitas SUBSTR()
fungsi dengan memungkinkan kita untuk menggunakan pola ekspresi reguler.
Sintaks
Sintaksnya seperti ini:
REGEXP_SUBSTR ( source_char, pattern
[, position
[, occurrence
[, match_param
[, subexpr ]
]
]
]
)
Dimana:
source_char
adalah ekspresi karakter yang berfungsi sebagai nilai pencarian.pattern
adalah ekspresi reguler.position
adalah bilangan bulat positif yang menentukan tempat untuk memulai pencarian. Standarnya adalah1
, artinya, mulailah pencarian pada karakter pertama.occurrence
adalah bilangan bulat nonnegatif yang menentukan kejadian mana yang akan dicari. Standarnya adalah1
, yang berarti mencari kemunculan pertama.match_param
memungkinkan Anda mengubah perilaku pencocokan default dari fungsi tersebut. Misalnya, ini memungkinkan Anda untuk menentukan sensitivitas huruf besar-kecil, bagaimana beberapa baris dan spasi ditangani, dll. Argumen ini bekerja sama seperti ketika digunakan denganREGEXP_COUNT()
fungsi. Lihat dokumentasi Oracle untuk fungsi tersebut untuk informasi lebih lanjut.- Untuk
pattern
dengan subekspresi,subexpr
adalah bilangan bulat nonnegatif dari 0 hingga 9 yang menunjukkan subekspresi mana dalampattern
akan dikembalikan oleh fungsi. Argumen ini bekerja sama seperti ketika digunakan denganREGEXP_INSTR()
fungsi. Lihat dokumentasi Oracle untuk informasi lebih lanjut tentang fungsi tersebut.
Contoh
Berikut adalah contoh dasar penggunaan REGEXP_SUBSTR()
di Oracle:
SELECT
REGEXP_SUBSTR('Cats and dogs', 'd.g')
FROM DUAL;
Hasil:
dog
Dalam hal ini ada kecocokan, dan substring pertama (dan dalam kasus ini, hanya) yang cocok akan dikembalikan.
Ekspresi reguler bisa sangat kuat, dan contoh ini menggunakan contoh yang sangat sederhana. Untuk menggunakan REGEXP_SUBSTR()
secara efektif, Anda harus mengetahui pola yang benar untuk digunakan untuk hasil yang diinginkan.
Tidak Cocok
Berikut ini contoh di mana tidak ada kecocokan:
SET NULL 'null';
SELECT REGEXP_SUBSTR('My dogs like dregs', 't.g')
FROM DUAL;
Hasil:
null
Tidak ada yang cocok, jadi null
dikembalikan.
Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali null
terjadi sebagai akibat dari SQL SELECT
penyataan.
Namun, Anda dapat menggunakan SET NULL
untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null
harus dikembalikan.
Beberapa Kecocokan
Berikut ini contoh dengan beberapa kecocokan:
SELECT
REGEXP_SUBSTR('My dogs have dags', 'd.g')
FROM DUAL;
Hasil:
dog
Namun, Anda dapat menentukan kemunculan mana yang akan diganti jika diperlukan:
SELECT
REGEXP_SUBSTR('My dogs have dags', 'd.g', 1, 2)
FROM DUAL;
Hasil:
dag
Perhatikan bahwa saya menambahkan dua argumen di sini; 1
dan 2
. 1
menentukan keberadaan dalam string untuk memulai pencarian (dalam hal ini, pada karakter pertama). 2
adalah apa yang menentukan kejadian mana yang harus dicari. Dalam hal ini, kemunculan kedua dicari.
Inilah yang terjadi jika saya memulai pencarian setelah kemunculan pertama:
SELECT
REGEXP_SUBSTR('My dogs have dags', 'd.g', 8, 2)
FROM DUAL;
Hasil:
null
Dalam hal ini tidak ada kecocokan, karena hanya ada satu kejadian lagi setelah posisi awal.
Jika saya mengubah argumen terakhir menjadi 1
, maka kita mendapatkan kecocokan (karena ini adalah kemunculan pertama setelah posisi awal yang ditentukan):
SELECT
REGEXP_SUBSTR('My dogs have dags', 'd.g', 8, 1)
FROM DUAL;
Hasil:
dag
Sensitivitas Huruf Besar
REGEXP_SUBSTR()
function mengikuti aturan penentuan dan derivasi susunan Oracle, yang menentukan susunan yang akan digunakan saat mencocokkan string dengan pola.
Namun, Anda dapat secara eksplisit menentukan sensitivitas huruf besar-kecil dengan argumen kelima opsional. Saat Anda melakukannya, ini akan menggantikan sensitivitas huruf besar atau kecil atau sensitivitas aksen dari susunan yang ditentukan.
Anda dapat menentukan i
untuk pencocokan case-insensitive dan c
untuk pencocokan peka huruf besar/kecil.
Ini contohnya:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t', 1, 1) AS "Default",
REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'i') AS "Case Insensitive",
REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'c') AS "Case Sensitive"
FROM DUAL;
Hasil:
Default Case Insensitive Case Sensitive __________ ___________________ _________________ null Cat null
Susunan saya tampaknya peka terhadap huruf besar-kecil, berdasarkan hasil ini. Dua string lainnya dipaksa untuk pencocokan case-insensitive dan case-sensitive masing-masing.
Subekspresi
Berikut adalah contoh penggunaan argumen keenam untuk mengembalikan pola subekspresi tertentu:
SELECT REGEXP_SUBSTR(
'catdogcow',
'(c.t)(d.g)(c.w)',
1, 1, 'i', 1
)
FROM DUAL;
Hasil:
cat
Dalam hal ini saya mengembalikan subekspresi pertama.
Inilah yang terjadi jika saya menentukan subekspresi ketiga:
SELECT REGEXP_SUBSTR(
'catdogcow',
'(c.t)(d.g)(c.w)',
1, 1, 'i', 3
)
FROM DUAL;
Hasil:
cow
Argumen Null
Jika ada argumen null
, hasilnya null
:
SET NULL 'null';
SELECT
REGEXP_SUBSTR(null, 'c.t', 1, 1, 'i', 1) AS "1",
REGEXP_SUBSTR('Cat', null, 1, 1, 'i', 1) AS "2",
REGEXP_SUBSTR('Cat', 'c.t', null, 1, 'i', 1) AS "3",
REGEXP_SUBSTR('Cat', 'c.t', 1, null, 'i', 1) AS "4",
REGEXP_SUBSTR('Cat', 'c.t', 1, 1, null, 1) AS "5",
REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', null) AS "6"
FROM DUAL;
Hasil:
1 2 3 4 5 6 _______ _______ _______ _______ _______ _______ null null null null null null
Jumlah Argumen Salah
Tidak meneruskan argumen ke fungsi, atau terlalu sedikit, menghasilkan kesalahan:
SELECT REGEXP_SUBSTR()
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT REGEXP_SUBSTR() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Hal yang sama berlaku ketika kita memberikan terlalu banyak argumen:
SELECT REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, 'oops')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, 'oops') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action:
Informasi Lebih Lanjut
REGEXP_SUBSTR()
fungsi (serta implementasi ekspresi reguler Oracle lainnya) sesuai dengan standar ekspresi reguler Antarmuka Sistem Operasi Portabel (POSIX) IEEE dan Pedoman Ekspresi Reguler Unicode dari Konsorsium Unicode.
Lihat dokumentasi Oracle untuk informasi lebih lanjut dan contoh REGEXP_SUBSTR()
fungsi.