Di Oracle, REGEXP_REPLACE()
fungsi menggantikan kemunculan substring dalam string yang cocok dengan pola ekspresi reguler yang diberikan.
Ini memperluas fungsionalitas REPLACE()
fungsi dengan memungkinkan kita untuk menggunakan pola ekspresi reguler.
Sintaks
Sintaksnya seperti ini:
REGEXP_REPLACE ( source_char, pattern
[, replace_string
[, position
[, occurrence
[, match_param ]
]
]
]
)
Dimana:
source_char
adalah ekspresi karakter yang berfungsi sebagai nilai pencarian.pattern
adalah ekspresi reguler.replace_string
adalah string pengganti.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 harus diganti. Standarnya adalah0
, yang artinya ganti semua kemunculan.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 informasi lebih lanjut.
Contoh
Berikut adalah contoh dasar penggunaan REGEXP_REPLACE()
di Oracle:
SELECT
REGEXP_REPLACE('Cats and dogs', 'd.g', 'bird')
FROM DUAL;
Hasil:
Cats and birds
Dalam hal ini ada kecocokan, dan substring diganti dengan string pengganti.
Ekspresi reguler bisa sangat kuat, dan contoh ini menggunakan contoh yang sangat sederhana. Untuk menggunakan REGEXP_REPLACE()
secara efektif, Anda harus mengetahui pola yang benar untuk digunakan untuk hasil yang diinginkan.
Tidak Cocok
Berikut ini contoh di mana tidak ada kecocokan:
SELECT REGEXP_REPLACE('Cats and dogs', 't.g', 'bird');
Hasil:
+------------------------------------------------+ | REGEXP_REPLACE('Cats and dogs', 't.g', 'bird') | +------------------------------------------------+ | Cats and dogs | +------------------------------------------------+
Tidak ada kecocokan, sehingga string asli dikembalikan tidak berubah.
Beberapa Kecocokan
Berikut ini contoh dengan beberapa kecocokan:
SELECT
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird')
FROM DUAL;
Hasil:
My bird likes other birds
Namun, Anda dapat menentukan kemunculan mana yang akan diganti jika diperlukan:
SELECT
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 1, 2)
FROM DUAL;
Hasil:
My dog likes other birds
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 diganti. Dalam hal ini, kemunculan kedua diganti.
Inilah yang terjadi jika saya memulai pencarian setelah kemunculan pertama:
SELECT
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 7, 2)
FROM DUAL;
Hasil:
My dog likes other dogs
Dalam hal ini string tidak diperbarui, karena hanya ada satu kemunculan lagi setelah posisi awal.
Jika saya mengubah argumen terakhir menjadi 1
, kemudian diperbarui seperti yang ditentukan (karena ini adalah kemunculan pertama setelah posisi awal yang ditentukan):
SELECT
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 7, 1)
FROM DUAL;
Hasil:
My dog likes other birds
Dan jika Anda bertanya-tanya, 0
menentukan semua kejadian:
SELECT REGEXP_REPLACE(
'My dog likes big dogs and small dogs',
'd.g',
'bird', 1, 0
)
FROM DUAL;
Hasil:
My bird likes big birds and small birds
Tapi tetap menghormati setiap posisi awal yang telah ditentukan:
SELECT REGEXP_REPLACE(
'My dog likes big dogs and small dogs',
'd.g',
'bird', 7, 0
)
FROM DUAL;
Hasil:
My dog likes big birds and small birds
Sensitivitas Huruf Besar
REGEXP_REPLACE()
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 keenam 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_REPLACE('My Cats', 'c.t', 'dog', 1, 0) AS "Default",
REGEXP_REPLACE('My Cats', 'c.t', 'dog', 1, 0, 'i') AS "Case Insensitive",
REGEXP_REPLACE('My Cats', 'c.t', 'dog', 1, 0, 'c') AS "Case Sensitive"
FROM DUAL;
Hasil:
Default Case Insensitive Case Sensitive __________ ___________________ _________________ My Cats My dogs My Cats
Tampaknya dari hasil ini bahwa susunan default saya peka terhadap huruf besar-kecil. Dua string lainnya dipaksa untuk pencocokan case-insensitive dan case-sensitive masing-masing.
Argumen Null
Melewati null
menghasilkan null
untuk sebagian besar argumen, kecuali argumen kedua dan keenam:
SET NULL 'null';
SELECT
REGEXP_REPLACE(null, 'c.t', 'dog', 1, 0, 'i') AS "1",
REGEXP_REPLACE('Cat', null, 'dog', 1, 0, 'i') AS "2",
REGEXP_REPLACE('Cat', 'c.t', null, 1, 0, 'i') AS "3",
REGEXP_REPLACE('Cat', 'c.t', 'dog', null, 0, 'i') AS "4",
REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, null, 'i') AS "5",
REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, 0, null) AS "6"
FROM DUAL;
Hasil:
1 2 3 4 5 6 _______ ______ _______ _______ _______ ______ null Cat null null null Cat
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.
Jumlah Argumen Salah
Tidak meneruskan argumen ke fungsi, atau terlalu sedikit, menghasilkan kesalahan:
SELECT REGEXP_REPLACE()
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT REGEXP_REPLACE() 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:
Sama halnya dengan memberikan terlalu banyak argumen:
SELECT REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, 0, 'i', 'oops')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, 0, 'i', '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_REPLACE()
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_REPLACE()
fungsi.