Anda di halaman 1dari 35

REGEX

8 Mei 2023
Learning Outcome
● Mengenal apa itu REGEX dan bagaimana penggunaannya di MySQL
● Dapat menggunakan konstruksi regex lanjutan Grouping, Capturing
and Non-capturing Group untuk menyederhanakan penulisan
ekspresi
Learning Outcome

1. Dapat memahami apa itu REGEX dan bagaimana penggunaannya di


MySQL
2. Dapat menggunakan konstruksi REGEX lanjutan Grouping, Capturing
and Non-capturing Group untuk menyederhanakan penulisan
ekspresi
Agenda

1. REGEX dan Penggunaannya


2. Pembahasan Konstruksi REGEX
REGEX
Regular Expression (REGEX)
1. Regular expression atau REGEX adalah teks yang bisa digunakan untuk
mengidentifikasi dan mengganti teks dengan pola yang sangat beragam.
2. REGEX bisa digunakan secara umum di banyak aplikasi dan bahasa
pemrograman.
3. REGEX bersifat case sensitive.
4. Untuk latihan dan pengetesan, kita juga bisa menggunakan
https://regexr.com/
5. Dilakukan untuk melakukan validasi atau pencarian.
Aturan Dasar REGEX

1. Karakter yang ditemukan terlebih dahulu dari paling kiri yang akan
diambil.
2. REGEX terdiri dari kombinasi karakter literal dan metacharacter.
Teks Literal

1.Teks literal adalah pola REGEX yang akan dicocokkan persis atau apa
adanya dengan teks yang akan dibandingkan.
2.Teks literal terdiri dari huruf karakter apapun kecuali $()*+.?[]\^{|
yang disebut sebagai metacharacter. Dengan menggunakan tanda
backslash \ di depan karakter tersebut akan dikenali sebagai karakter
literal
Teks Literal

1. Mencocokkan kata undang-undang


→ REGEX literal = undang-undang.
2. Mencocokkan kata karyawati
→ REGEX literalnya = karyawati.
3. Mencocokkan email maharanyf@gmail.com
→ REGEX literalnya = maharanyf@gmail\.com.
Metacharacter

1. Karakter pada REGEX yang merepresentasikan karakter/struktur


pengelompokan dan perulangan teks.
2. Beberapa metacharacter bisa punya makna yang berbeda ketika
masuk ke komposisi REGEX yang berbeda.
3. Metacharacter pada REGEX adalah rangkaian karakter berikut
→ $()*+.?[]\^{|
. (Dot)

1. Dot atau tanda titik merupakan metacharacter yang merepresentasikan


satu karakter apapun kecuali baris (newline character).
2. Jika kita ingin mencocokkan karakter apapun dengan jumlah tertentu maka
dot yang ditulis juga harus dengan jumlah yang diinginkan tersebut.
Contoh:
… akan cocok dengan teks hai, get, bye tapi tidak akan cocok dengan hi dan oi.
Quantifier / Perulangan

Pola perulangan dari suatu karakter dan diletakkan persis di belakang


suatu karakter, metacharacter atau character class.
Quantifier Deskripsi
? Opsional, karakter tersebut bisa ada atau tidak
* Memiliki perulangan atau tidak sama sekali
+ Memiliki perulangan minimal 1 kali
{n} Memiliki n kali perulangan
{m, n} Memiliki perulangan minimum m kali dan maksimum n kali
Anchor Metacharacter
Menandai posisi awal dan akhir dari karakter.
Metacharacter Nama Character Fungsi Contoh Penulisan
^ Caret Penanda awal dari suatu rangkaian ^DQLab
karakter dari suatu baris teks.
Diletakkan di depan karakter yang
harus menjadi awalan.
$ Dollar Penanda akhir dari suatu rangkaian Pandora Box$
karakter dari suatu baris teks.
Diletakkan di belakang karakter yang
harus menjadi akhiran.
\b Boundary Menandai batas dari suatu kata \bPandora\b
Character Class
1.Konstruksi yang menggunakan tanda kurung siku [] dengan daftar
karakter di dalamnya.
2.Konstruksi ini akan mencocokkan salah satu karakter yang terdapat
pada character class ini.
Contoh:
a.[oe] akan cocok dengan karakter o/e
b.b[oe]la akan cocok dengan bola dan bela.
Character Class Metacharacters
Di dalam character class juga terdapat beberapa metacharacter yang
khusus bisa digunakan pada character class ini, antara lain.
Metacharact Nama Character Fungsi Contoh
er
^ Negation Merupakan karakter yang tidak [^abc]
ingin atau tidak boleh dicocokkan
Menunjukkan bahwa karakter
a, b, dan c tidak diperbolehkan
- Dash Range atau rentang dari karakter [0-9]
yang diinginkan
Non-Printable Character
1. Ekspresi yang mewakili karakter tertentu seperti tab, control, alert, dan lain-
lain.
2. Diawali dengan karakter backlash (disebut juga dengan karakter escape) atau
tanda garis miring terbalik (\).

Non-Printable Deskripsi
Character
\t tab (tabulasi horizontal) ('\u0009')
\n line feed (pergantian baris) ('\u000A')
\v vertikal tab (Tabulasi vertikal) ('\u000B')
\f form-feed (pergantian baris) ('\u000C')
\r carriage-return (pergantian baris) ('\u000D')
\angka angka octal yang merepresentasikan ASCII (misal : \13)
\xangka angka hexadecimal yang merepresentasikan ASCII (misal : \xB)
\uangka angka hexadecimal yang merepresentasikan Unicode (misal : \u000B)
Class Shorthand
Penulisan singkat dari rangkaian karakter tertentu yang sudah umum
dikategorisasikan, misalkan rangkaian angka, rangkaian huruf, dan lain-
lain.

Class Shorthand Menggantikan Character Class Deskripsi


\w [A-Za-z0-9_] Karakter alfanumerik dengan tanda
garis bawah
\W [^A-Za-z0-9_] Karakter bukan kata
\a [A-Za-z] Karakter alfabetik
\d [0-9] Karakter angka (digit)
\D [^0-9] Karakter bukan angka (non-digit)
\s [ \t\r\n\v\f] Karakter spasi, tab, dan line feed
\S [^ \t\r\n\v\f] Karakter non spasi, tab, dan line feed
Import table ms_people.csv ke dalam
Database minimart
REGEXP dan NOT REGEXP (mirip LIKE)

1. expr REGEXP pattern


a. Hasilnya 1 (TRUE) kalau expr match dengan pattern yang diset, 0
(FALSE) kalau tidak match, dan NULL kalau salah satu value nya
NULL
2. expr NOT REGEXP pattern
a. Negasi dari REGEXP, bisa juga ditulis NOT (expr REGEXP pattern)
3. Bersifat case insensitive
4. Biasanya digunakan untuk filtering (WHERE)
Contoh REGEXP
-- memfilter alamat yang ada angka 26
select *
from ms_people
where address regexp '26';
Contoh REGEXP
-- memfilter email diawali huruf aa
(case insensitive)
select *
from ms_people
where email regexp '^Aa';
REGEXP_LIKE
1. REGEXP_LIKE(expr, pattern[, match_type])
a. Hasilnya 1 (TRUE) kalau expr match dengan pattern yang diset, 0 (FALSE) kalau tidak match, dan
NULL kalau salah satu value nya NULL
2. Opsional argumen match_type
a. c : Case-sensitive
b. i : Case-insensitive, default di MySQL
c. m : Multiple-line mode, untuk proses string yang ada beberapa baris. Secara default hanya match
ganti baris di awal dan akhir saja
d. u : Unix-only line endings, hanya (\n) yang dianggap sebagai line ending oleh Anchor
Metacharacter (., ^, dan $)
3. Biasanya digunakan untuk filtering (WHERE)
Contoh REGEXP_LIKE
-- memfilter people yang emailnya diawali Aa (case sensitive)
select *
from ms_people
where regexp_like (email, '^Aa', 'c');
REGEXP_REPLACE
● REGEXP_REPLACE(expr, pattern, replacement [, pos [, occurrence [,
match_type]]])
○ Mengganti pattern yang match dengan string replacement
● Opsional argumen
○ pos, posisi dari expr untuk memulai pencarian, defaultnya 1
○ occurrence, hasil match keberapa yang diganti, default 0, artinya semuanya
diganti
○ match_type, seperti di REGEXP_LIKE
● Biasanya digunakan di bagian SELECT
Contoh REGEXP_REPLACE
-- Mengganti semua angka di alamat
menjadi XX
select regexp_replace(address, '[0-
9]+','XX')
from ms_people
limit 10;
REGEXP_SUBSTR
1. REGEXP_SUBSTR(expr, pattern[, pos [, occurrence [, match_type]]])
a. Mengambil sebagian dari expr hanya yang match dengan pattern
saja
2. Opsional argumen
a. pos, posisi dari expr untuk memulai pencarian, defaultnya 1
b. occurrence, hasil match keberapa yang dipakai, default 1
c. match_type, seperti di REGEXP_LIKE
3. Biasanya digunakan di bagian SELECT
Contoh REGEXP_REPLACE
-- Mengambil angka dari alamat
select regexp_substr(address, '[0-9]+')
from ms_people
limit 10;
Grouping, Capturing dan Non–
Capturing Group
Alternation

1.Konstruksi REGEX yang digunakan untuk mencocokkan satu atau lebih


alternatif pola (character, metacharacter, atau character sets)
2.Metacharacter dari alternation adalah tanda |
Contoh:
aduh|Adauw.+ akan cocok dengan teks berikut
Duh aduh, kita bisa telat banget neh
Adauw, bukan gitu caranya
Grouping
1.Konstruksi REGEX yang digunakan untuk mengelompokkan pola yang didapatkan
dengan menggunakan notasi tanda kurung ( … )
2.Dengan menggunakan grouping kita bisa menggunakan alternation dan quantifier
seperti halnya pada karakter atau metacharacter

Contoh:
• Penggunaan quantifier grouping (ha)+ akan cocok dengan teks hahaha
• Penggunaan alternation di grouping be(tul|nar) akan cocok dengan teks betul
maupun benar
Group Capturing
1. Pola Grouping yang cocok secara default akan dimasukkan dalam memori secara terurut
dan disebut sebagai capturing group
2. Referensi untuk capturing group (backference) ini pada setiap implementasi aplikasi
berbeda, tapi secara umum adalah menggunakan prefix backslash (\) atau dollar ($) diikuti
dengan nomor urut group
Contoh
3. Regex .+(aku).+(B.+) pada teks Nama aku adalah Budi akan mendapatkan dua capturing

group, yaitu aku dan Budi.


4. Pada contoh capturing group di atas, backreference \1 adalah aku, sedangkan

backreference \2 adalah Budi .


Non-capturing Group
Agar hanya berfungsi sebagai grouping dan tidak melakukan capturing, maka kita
perlu menambahkan apa yang dinamakan modifier ?: setelah tanda (.

Contoh:
1. Regex .+(aku).+(?:B.+) pada teks Nama aku adalah Budi akan mendapatkan satu

capturing group saja, yaitu aku. Ini karena pada grouping kedua kita tambahkan
modifier non-capturing.
2. Pada contoh capturing group di atas, backreference \1 adalah aku, sedangkan

backreference \2 tidak berisi apa-apa


Mengambil Nama Domain dan Ekstensi Dari email

select email, regexp_replace(email, '.*@(.*)', '$1') domain


from ms_people mp
limit 10;

select email, regexp_substr(email, '(@.+)')


from ms_people mp
limit 10;

select SUBSTR(email , INSTR(email, '@') + 1) as new


from ms_people mp
limit 5;

select email,
substr(regexp_substr(email, '@.+'),2)
from ms_people mp;
Referensi
● https://dev.mysql.com/doc/refman/8.0/en/regexp.html

Anda mungkin juga menyukai