A.
Pengertian RegEx
Regex adalah sebuah pattern matching,
yaitu notasi yang digunakan untuk mencocokkan teks dan data, dan
memanipulasinya. Biasanya lebih sering digunakan untuk string.
Contoh: validasi input email/password, searching, replace. RegEx memiliki 2 fungsi utama yakni mencari dan mengganti, mencari suatu pola tertentu dalam text lalu menggantinya menjadi pola yang lain. Dengan menggunakan Regex, kita dapat dengan mudah menemukan pola karakter spesifisik dari sejumlah teks. Kita juga dapat dengan mudah mengganti, memodifikasi atau menghapus suatu substring dengan cepat dan akurat sesuai dengan Regex yang telah kita buat. Keuntungan menggunakan regex adalah tidak ada keterbatasan untuk ukuran data numeric.
Contoh: validasi input email/password, searching, replace. RegEx memiliki 2 fungsi utama yakni mencari dan mengganti, mencari suatu pola tertentu dalam text lalu menggantinya menjadi pola yang lain. Dengan menggunakan Regex, kita dapat dengan mudah menemukan pola karakter spesifisik dari sejumlah teks. Kita juga dapat dengan mudah mengganti, memodifikasi atau menghapus suatu substring dengan cepat dan akurat sesuai dengan Regex yang telah kita buat. Keuntungan menggunakan regex adalah tidak ada keterbatasan untuk ukuran data numeric.
Regular Expression
digunakan oleh banyak teks editor, utilities, dan bahasa pemrograman untuk
pencarian dan memanipulasi teks berdasarkan pola. Misalnya, Perl, Ruby, PHP,VB
dan Tcl memiliki engine Regular Expression yang kuat dibangun pada syntax
mereka.
Sering kali orang beranggapan bahwa regex susah dan membingungkan.
Namun sebenarnya regex sangatlah membantu dalam menemukan pola-pola kalimat.
Sehingga percobaan terhadap semua kemungkinan pola kalimat tidak perlu
dilakukan. Sebuah alasan yang sangat bagus untuk menggunakan regex adalah karena regex sangatlah
powerfull. Pada level rendah regex dapat
mencari sebuah penggalan kata. Pada level tinggi regex mampu melakukan kontrol terhadap data.
Baik mencari, menghapus dan merubah.
B.
Sejarah RegEx
Tahun 1950an, Stephen Cole
Kleene seorang ahli matematika membuat sebuah model pattern string menggunakan
notasi matematika, yang disebut regular sets. Ken Thompson mengimplementasikan
notasi tersebut ke dalam text editor buatannya, QED, untuk pencarian string
dengan pola tertentu. Dia juga menambahkan fitur tersebut ke dalam ed, sebuah
editor text dalam sistem operasi unix. Untuk pencarian string dalam ed
menggunakan pattern, perintahnya: /g /re /p (/g : globally, /re : regular
expression, /p : print) yang maksudnya adalah pencarian global baris - baris
dalam sebuah file yang memiliki pola tertentu, dan ditampilkan/cetak/print.
Istilah Grep akhirnya digunakan sebagai nama sebuah program atau tool dalam
sistem operasi unix untuk fungsi yang sama yakni pencarian string.
C.
Prinsip Kerja RegEx
Engine RegEx terdiri
dari 2 jenis Text-directed engine dan regex-directed engine atau
ada juga yang mengatakan DFA (Deterministic Finite Automaton) dan NFA (Nondeterministic
Finite Automaton) engines. Namun jenis mesin engine yang lebih banyak diminati
adalah regex-directed engine, disamping itu
featurenya lebih hebat dari text-directed engine.
Misalnya saja kita mencocokan kata “regex” dengan kata “belajar regex sekarang”, pertama-tama regex akan memulai mencocokan karakter pertama yaitu huruf “R” dengan “B”, karena tidak cocok maka akan dilanjutkan ke tempat selanjutny yaitu “R” dengan “E”, karena masih belum cocok juga proses ini akan terus berlanjut, hingga akhirnya menemukan hurup “R” yaitu di posisi ke-7, hasil ini akan disimpan di memori bahwa telah valid pada posisi ke-7, kemudian akan meneruskan langkah selanjutnya mencocokan hurup “E” dengan ” ” dan ternyata tidak cocok, engine akan mulai melakukan pencocokan kembali. Karena huruf “E” tidak ditemukan maka kali ini engine akan kembali menggunakan huruf “R” dan dicocokan pada posisi ke-9 yakni huruf “R”. Karena valid, engine menggunakan huruf berikutnya yakni huruf “E” dan dicocokan dengan posisi ke-10 yakni huruf=”E”. Proses ini akan terus diulang hingga mencapai posisi akhir suatu himpunan string. Nah jika kata “regex” ditemukan oleh kata “belajar regex sekarang” maka engine akan melaporkan bahwa Regular Expression telah valid, meskipun masih ada karakter yang belum di validasi (kata “sekarang”). Itu adalah cara kerja NFA yang lama, berbeda dengan mesin NFA yang sekarang, sudah lebih baik, yaitu meskipun string yang dicari telah match tetap akan diteruskan sampai benar-benar valid ditemukan. Setelah itu baru dibuat laporan sukses. Berbeda dengan engine dari NFA, engine DFA memilik cara kerja yakni membandingkan semua karakter secara serempak, hal ini membuat total memory yang dibutuhkan lebih besar dari NFA, sehingga teknologi NFA lebih diminati.
Beberapa sistem yang telah menggunakan teknologi NFA ini diantaranya adalah Perl, Java, .NET languages, PHP, Python, Ruby dan masih banyak lagi.
Misalnya saja kita mencocokan kata “regex” dengan kata “belajar regex sekarang”, pertama-tama regex akan memulai mencocokan karakter pertama yaitu huruf “R” dengan “B”, karena tidak cocok maka akan dilanjutkan ke tempat selanjutny yaitu “R” dengan “E”, karena masih belum cocok juga proses ini akan terus berlanjut, hingga akhirnya menemukan hurup “R” yaitu di posisi ke-7, hasil ini akan disimpan di memori bahwa telah valid pada posisi ke-7, kemudian akan meneruskan langkah selanjutnya mencocokan hurup “E” dengan ” ” dan ternyata tidak cocok, engine akan mulai melakukan pencocokan kembali. Karena huruf “E” tidak ditemukan maka kali ini engine akan kembali menggunakan huruf “R” dan dicocokan pada posisi ke-9 yakni huruf “R”. Karena valid, engine menggunakan huruf berikutnya yakni huruf “E” dan dicocokan dengan posisi ke-10 yakni huruf=”E”. Proses ini akan terus diulang hingga mencapai posisi akhir suatu himpunan string. Nah jika kata “regex” ditemukan oleh kata “belajar regex sekarang” maka engine akan melaporkan bahwa Regular Expression telah valid, meskipun masih ada karakter yang belum di validasi (kata “sekarang”). Itu adalah cara kerja NFA yang lama, berbeda dengan mesin NFA yang sekarang, sudah lebih baik, yaitu meskipun string yang dicari telah match tetap akan diteruskan sampai benar-benar valid ditemukan. Setelah itu baru dibuat laporan sukses. Berbeda dengan engine dari NFA, engine DFA memilik cara kerja yakni membandingkan semua karakter secara serempak, hal ini membuat total memory yang dibutuhkan lebih besar dari NFA, sehingga teknologi NFA lebih diminati.
Beberapa sistem yang telah menggunakan teknologi NFA ini diantaranya adalah Perl, Java, .NET languages, PHP, Python, Ruby dan masih banyak lagi.
Belajar Regex memang
susah diawal, tapi kalo sudah bisa akan sangat menyenangkan dan membantu
pekerjaan kita sehari-hari. Tidak hanya
programmer saja perlu mengenal Regex, orang awam juga perlu karena manfaatnya
bakalan besar sekali misalnya mencari file .doc, .pdf atau yang lainnya pada
sistem operasi windows
D.
Dasar Teori Regex
Salah satu fungsi yang dapat digunakan untuk operasi
regex adalah:
Ø ereg(string_pola, string_sumber);
fungsi ini akan menghasilkan
TRUE, jika ternyata pola cocok dengan sumber dan FALSE jika keduanya tidak
cocok. Pola dari fungsi di atas adalah rumus dari data text yang diinginkan.
Cara membuat rumus canggih ini dengan menggunakan karakter meta. singkatnya
meta itu adalah karakter yang memiliki arti tertentu. contoh pada perintah DOS
adalah DIR *.*, karakter * tidak diartikan sebagai karakter bintang oleh
komputer melainkan mempunyai arti khusus.
Ada beberapa karakater meta
yang perlu di ketahui, yaitu :
·
Karakter meta | (Garis Vertikal)
Karakter | artinya
menjadikan karakter meta text sebagai pilihan pada pola untuk di cocokan dengan
sumber. Contoh: ereg(Uus | Lukman |Nanang, Lukman) Artinya akan TRUE karena
Lukman adalah salah satu pilihan dari pola. namun jika sumbernya ternyata
adalah Hasan, hasilnya akan FALSE alias tidak cocok, karena hasan tidak ada
pada salah satu pilihan tersebut. ( dan ), karakter kurung buka dan kurung
tutup karakter kurung buka dan kurung tutup berguna untuk mengelompokan
beberapa kata atau data text agar dianggap menjadi suatu kesatuan. Contoh:
ureg((Uus Musailini)|(Lukmanul Hakim)|Nanang, Lukmanul); Hasil penyataan regex
di atas adalah FALSE alias tidak cocok , karena Lukmanul Hakim adalah satu
kesatuan, sehingga tidak sama Lukmanul saja.
Tabel 1. pola
umum pada regex
Pola
|
Penjelasan
|
[ ]
|
ekspresi kurung. cocok dengan satu karakter yang berada dalam
kurung, misal: pattern "a[bcd]i" cocok dengan string
"abi", "aci", dan "adi". penggunaan
range huruf dalam kurung diperbolehkan, misal : pattern "[a-z]"
cocok dengan salah satu karakter diantara string "a" sampai
"z". pattern [0-9] cocok dengan salah satu angka. jika ingin
mencari karakter "-" juga, karakter tersebut harus diletakkan di
depan atau di belakang kelompok, misal: "[abc-]".
|
[^ ]
|
cocok dengan sebuah karakter yang tidak ada dalam kurung,
berlawanan dengan yang diatas. misal: pattern "[^abc]" cocok
dengan satu karakter apa saja kecuali "a",
"b", "c".
|
?
|
cocok dengan nol atau satu karakter sebelumnya. misal: pattern
"died?" cocok dengan string "die" dan "died".
|
+
|
cocok dengan satu atau lebih karakter sebelumnya. misal:
"yu+k" cocok dengan "yuk", "yuuk",
"yuuuk", dan seterusnya.
|
*
|
cocok dengan nol atau lebih karakter sebelumnya. misal: pattern
"hu*p" cocok dengan string "hp", "hup",
"huup" dan
seterusnya.
|
{x}
|
cocok dengan karakter sebelumnya sejumlah x karakter. misal:
pattern "[0-9]{3}" cocok dengan bilangan berapa saja
yang berukuran 3 digit.
|
{x,y}
|
cocok dengan karakter sebelumnya sejumlah x hingga y karakter.
misal: pattern "[a-z]{3,5}" cocok dengan semua
susunan huruf kecil yang terdiri dari 3 sampai 5 huruf.
|
!
|
jika diletakkan di depan pattern, maka berarti "bukan".
misal pattern "!a.u" cocok dengan string apa saja kecuali string
"alu", "anu", "abu", "asu",
"aiu", dan seterusnya .
|
^
|
jika diletakkan di depan pattern, akan cocok dengan awal sebuah
string.
|
( )
|
gruping. digunakan untuk mengelompokkan karakter - karakter
menjadi single unit. string yang cocok dalan pattern yang berada dalam tanda
kurung dapat digunakan pada operasi berikutnya. semacam variable.
|
\
|
escape character. mengembalikan fungsi metacharacter menjadi
karakter biasa. pada beberapa system dapat berarti sebaliknya, yaitu
metacharacter menggunakan escape
character didepannya .
|
$
|
jika diletakkan di
belakang pattern, akan
cocok dengan akhir sebuah string.
|
Selain karakter meta di atas PHP juga menyediakan
class karakter yang fungsinya sama dengan meta, beberapa class di PHP tersebut
yaitu, [[:alpa]] akan berarti sembarang huruf, [[:digit]] akan mengwakilik
angka, [[[:alnum]] akan berarti angka atau digit, [[:space]] akan berarti
sembarang space, [[:upper]] akan berarti sembarang huruf kapital dan [[:lower]]
akan berarti sembarang huruf kecil.
E.
BEBERAPA CONTOH
PENGGUNAAN REGEX PADA C#
Ø VALIDASI ALPHA NUMERIC
di VB.Net dan C#
Alpha Numeric itu artinya huruf (Alfabet A-Z) dan
Angka(0-9). Validasi ini diperlukan jika kita ingin user menginputkan
karakter-karakter hanya huruf dan angka saja. Contohnya plat nomor kendaraan,
NPM (Nomor Pokok Mahasiswa), dll. Berikut ini cara membuatnya.
Berikut ini adalah
step-step dalam membuatnya.
1.
Buka Microsoft Visual Studio caranya start -> run
-> ketikkan devenv. Lalu buat project baru dengan nama :ValidAlphaNumeric seperti
gambar berikut ini.

Jangan lupa pilih Windows Form Application dan pilih
bahasa pemrograman sesuai keinginan Anda.
2.
Ubah properti Form 1 seperti berikut ini.
Object
|
Properties
|
Value
|
Form 1
|
Text
|
Validasi
AlphaNumeric
|
StartPosition
|
CenterScreen
|
|
label1
|
Text
|
Masukan
Data :
|
TextBox1
|
Name
|
txtData
|
Button1
|
Name
|
btnOk
|
Text
|
&OK
|
Sehingga tampilan Form1 jadi seperti gambar berikut ini:
. 

3. Saatnya Coding
Untuk VB.Net:kode di btnOk_Click() :cara akses event ini cukup
klik 2x btnOk. Lalu tambahkan kode seperti berikut.
Private Sub btnOK_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnOK.Click
MessageBox.Show(Regex.IsMatch(txtPlat.Text,
"^[a-zA-Z0-9]*$").ToString())
End Sub
Setelah itu tambah kode Imports
System.Text.RegularExpressions di baris paling atas hingga kode di form 1
menjadi seperti berikut ini.
1
2
3
4
5
6
7
8
|
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
MessageBox.Show(Regex.IsMatch(txtPlat.Text,
"^[a-zA-Z0-9]*$").ToString())
End Sub
End Class
|
Penjelasan Kode :
- Baris ke 1 : Sertakan namespace Regular Expression.
- Baris ke 6 : Cek Apakah yang diisikan di txtPlat.txt itu sesuai dengan pernyataan regular expression ini ^[a-zA-Z0-9]$.
Maksud dari pernyataan RegEx (Regular Expression) tadi adalah:
* ^ : memulai pernyataan regular expression
* [a-zA-Z0-9] : Karakter yang diizinkan adalah a kecil sampai z kecil, A besar sampai Z besar, angka 0 sampai 9
* $ : akhir dari pernyataan Regex
Untuk C# :
kode di btnOk_Click() :
kode di btnOk_Click() :
cara akses event ini cukup klik 2x btnOk. Lalu tambahkan kode seperti
berikut.
1
2
3
4
|
private void btnOK_Click(object sender,
EventArgs e)
{
MessageBox.Show(Regex.IsMatch(txtPlat.Text,
"^[a-zA-Z0-9]*$").ToString());
}
|
Setelah itu tambah kode
using System.Text.RegularExpressions; di baris paling atas hingga kode di form
1 menjadi seperti berikut ini.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace ValidAlphaNumeric
{
public partial class Form1 :
Form
{
public Form1()
{
InitializeComponent();
}
private void btnOK_Click(object sender,
EventArgs e)
{
MessageBox.Show(Regex.IsMatch(txtPlat.Text,
"^[a-zA-Z0-9]*$").ToString());
}
}
}
|
Penjelasan Kode sama dengan penjelasan kode VB.Net
4. Hasilnya
Ketika program ini dijalankan dan di klik OK maka program akan cek isi dari txtData.txt dan menampilkan messagebox berisikan True (Jika Sesuai) atau False(Tidak sesuai)Jika yang diinputkan sembarang karakter (alphanumeric + karakter lainnya.
Ketika program ini dijalankan dan di klik OK maka program akan cek isi dari txtData.txt dan menampilkan messagebox berisikan True (Jika Sesuai) atau False(Tidak sesuai)Jika yang diinputkan sembarang karakter (alphanumeric + karakter lainnya.

Jika yang
diinputkan AlphaNumeric:

Ø
Langkah –langkah menggunakan regex untuk menentukan apakah string
cocok pola tertentu
langkah-langkah ini menunjukkan Anda bagaimana untuk membuat dan menggunakan
regex untuk menentukan apakah string cocok pola tertentu. Regular expressions memungkinkan untuk mudah parsing dan pencocokan
string untuk pola tertentu. Menggunakan
benda-benda yang tersedia dalam RegularExpressions namespace, Anda dapat membandingkan string terhadap pola yang
diberikan, mengganti pola string dengan string lainnya, atau mengambil hanya
bagian dari string diformat.Dalam contoh ini, kita akan membangun sebuah pola
untuk memvalidasi alamat e-mail.
Daftar berikut
menguraikan fitur perangkat keras, perangkat lunak, infrastruktur jaringan, dan
paket layanan yang Anda butuhkan:
·
Microsoft Visual C#
Artikel ini
mengasumsikan bahwa Anda sudah familiar dengan berikut topik:
·
Visual C#
·
Sintaks ekspresi reguler
Menggunakan regular expressions untuk mencocokkan pola:
1.
Mulai Visual C#.
2.
Membuat Visual C# konsol aplikasi
baru.
3.
Menentukan kata kunci menggunakan Text.RegularExpressions namespace
sehingga Anda tidak akan diminta untuk memenuhi syarat deklarasi tersebut
namespaces kemudian dalam kode Anda. Pernyataan menggunakan harus digunakan sebelum setiap Deklarasi lain:
using System.Text.RegularExpressions;
4.
Menentukan kalimat biasa baru yang
akan menggunakan pola cocok untuk memvalidasi alamat e-mail. Kalimat biasa
berikut ini disusun untuk mencapai tiga hal:
a.
Menangkap substring sebelum @ simbol
dan memasukkan ke dalam kelompok "pengguna".
b.
Menangkap substring setelah @ simbol
dan memasukkan ke dalam kelompok "host".
c.
Pastikan bahwa semester string tidak
memiliki simbol @.
Regex emailregex = new Regex("(?<user>[^@]+)@(?<host>.+)");
Mendefinisikan string baru yang
berisi alamat e-mail yang valid. Ini memberikan nilai default jika argumen baris perintah metode
yang kosong:
String s = "johndoe@tempuri.org";
Periksa untuk melihat apakah ada
parameter baris perintah; Jika ada, mengambil parameter pertama dan menetapkannya ke variabel
"s".
if ( args.Length > 0 ) {
s = args[0];
}
Menggunakan metode pertandingan untuk lulus
dalam variabel alamat e-mail dan kembali pertandingan baru
objek.Objek pertandingan akan kembali
terlepas dari Apakah setiap pertandingan yang ditemukan dalam sumber string.
Match m = emailregex.Match(s);
Dengan
memeriksa properti sukses , kita bisa memutuskan apakah akan melanjutkan pengolahan objek pertandingan atau untuk
mencetak pesan kesalahan. Jika berhasil, menampilkan "pengguna" dan
"host" bernama kelompok dalam kelompokkoleksi objek pertandingan .
if ( m.Success ) {
Console.WriteLine("User: " + m.Groups["user"].Value);
Console.WriteLine("Host: " + m.Groups["host"].Value);
} else {
Console.WriteLine(s + " is not a valid email address");
}
Console.WriteLine();
Untuk menjaga jendela konsol terbuka
setelah menjalankan aplikasi, tambahkan baris berikut kode:
System.Console.WriteLine("Press Enter to Continue...");
System.Console.ReadLine();
Membangun proyek Anda.
Untuk menjalankan aplikasi dari
lingkungan development yang menggunakan alamat e-mail default yang ditentukan
dalam kode, tekan F5 atau pilih mulai dari Debug menu. Untuk memulai aplikasi dengan argumen baris perintah, ada tiga
pilihan:
o Pada Project menu, klik properti, dan kemudian
klik Debug. Di bagian Pilihan
mulai dalam pane
kanan, menentukan alamat e-mail yang Anda ingin menguji. Tekan F5, atau
klik mulai pada menu Debug untuk
menjalankan aplikasi.
Di Visual C# .NET 2003:Pada Project menu, klik properti. Dalam pane kiri, klik Konfigurasi properti folder, dan kemudian klik Debugging. Di bawah Mulai pilihan, klik Argumen baris perintah dan menentukan alamat e-mail yang Anda inginkan untuk menguji. Tekan F5 atau pilih mulai dari menu Debug untuk menjalankan aplikasi.
Di Visual C# .NET 2003:Pada Project menu, klik properti. Dalam pane kiri, klik Konfigurasi properti folder, dan kemudian klik Debugging. Di bawah Mulai pilihan, klik Argumen baris perintah dan menentukan alamat e-mail yang Anda inginkan untuk menguji. Tekan F5 atau pilih mulai dari menu Debug untuk menjalankan aplikasi.
o Mulai
jendela perintah dan arahkan ke folder "bin\debug" di bawah folder di
mana proyek Anda berada. Kemudian ketik nama executable diikuti dengan alamat e-mail yang
ingin Anda tes.
o Menemukan
file eksekusi untuk proyek ini, dan seret ke awal...Run window pada taskbar. Tambahkan
alamat e-mail untuk memverifikasi, dan klik atau tekan OK.
Ø Cara Menvalidasi Email Menggunakan Regex pada C#
Pada Form tertentu biasanya kita sering menemukan pengisian form yang
mewajibkan mengisi email dengan syarat @yahoo.com , @ hotmail.com dan
@gmail.com . Cara menvalidasinya adalah menggunakan regex atau Regular
Expression. Berikut ini adalah langkah – langkahnya:
1.Tambahkan koding ini pada deretan baris paling atas
using
System.Text.RegularExpressions;
2. Double klik pada submit button yang ada pada
form yang bersangkutan sehingga kitadapat memulai koding. Contoh soal : email
harus berupa @yahoo.com atau @hotmail.com
private
void button1_Click(object sender, EventArgs e)
{
Regex
R = new Regex ("^+\\w+@+(yahoo\\.com | hotmail\\.com)+$");
if (R.IsMatch(textBox1.Text))
{
MessageBox.Show ("Email yang anda masukkan benar");
}
else
{
MessageBox.Show ("Email yang anda masukkan salah");
}
Catatan :
Untuk pengecekan di
atas, digunakan “^\\w+$”. Yang berarti :
§
\\w = huruf atau angka
§
+ = untuk menyatakan bahwa \\w harus ada minimal 1
§
Kedua simbol di atas di kelilingi oleh “^…..$”, yang
menandai awal dan akhir dari inputan.
F.
Keuntungan dan Kekurangan Menggunakan RegEx
Keuntungan menggunakan REGEXP ini adalah,pemirsa sama
sekali tidak dibatasi dalam pencarian yang berdasarkan string seperti halnya
pada operator LIKE. dan penggunaan REGEX bisa memperpendek penulisan statement
perintah Mysql terutama yang menggunakan AND dan OR pada klausa WHERE.
Ada keuntungan ada pula kerugian, Kerugiannya adalah
penggunaan REGEX sedikit sulit dimengerti dan dimaintain jika memiliki pattern
yang kompleks. misal ada sebuah string dengan nilai 1000AA7B-X1.221, jika ada
nilai dengan kondisi konstan misal 1000AA7B-X2.221,1000AA7B-X3.221 dst maka ini
mudah saja untuk mensetting pattern yang sesuai, namun jika tiba-tiba berubah
menjadi 1000AA7B-X11.221 tentu ini diperlukan perubahan pada desain pattern.
Kerugian berikutnya adalah penurunan performa mysql jika pattern tidak
dilakukan pada table yang ber-index.
Referensi:
Assalamualaikum
BalasHapusMaaf, saya sama sekali tidak bisa membaca artikel Anda ini.
Menurut saya, kombinasi warna yang Anda gunakan tidak userfriendly