Regex #
Regular expressions (regex) adalah pola pencarian yang digunakan untuk mencocokkan dan memanipulasi string. Ruby mendukung penggunaan regex dengan sintaks dan metode yang sangat fleksibel. Berikut adalah penjelasan lengkap tentang regex di Ruby, termasuk cara membuat dan menggunakan regex serta berbagai operasi yang dapat dilakukan.
Membuat Regex di Ruby #
Regex di Ruby didefinisikan menggunakan dua sintaks dasar:
a. Menggunakan Literal Regex:
Sintaks:
/pola/
Contoh:
regex = /hello/
b. Menggunakan Regexp
Class:
Sintaks:
Regexp.new('pola')
Contoh:
regex = Regexp.new('hello')
Penjelasan:
- Literal regex (
/hello/
) adalah cara yang lebih umum digunakan. Regexp.new('hello')
berguna jika pola regex dibuat dinamis atau perlu menggunakan variabel.
Operasi Dasar dengan Regex #
a. match
:
Metode match
mencocokkan string dengan pola regex dan mengembalikan objek MatchData
jika ditemukan, atau nil
jika tidak.
Contoh:
pattern = /hello/
text = "hello world"
match_data = pattern.match(text)
if match_data
puts "Match found: #{match_data[0]}"
else
puts "No match found."
end
Penjelasan:
match_data[0]
memberikan hasil pencocokan pertama.
b. =~
:
Operator =~
mengembalikan indeks awal dari pencocokan pertama atau nil
jika tidak ditemukan.
Contoh:
pattern = /hello/
text = "hello world"
index = text =~ pattern
if index
puts "Match found at index #{index}"
else
puts "No match found."
end
Penjelasan:
text =~ pattern
memberikan indeks awal dari string yang cocok dengan pola.
c. scan
:
Metode scan
mencocokkan semua instance dari pola dalam string dan mengembalikan array dari hasil pencocokan.
Contoh:
pattern = /\d+/
text = "There are 123 apples and 456 oranges."
matches = text.scan(pattern)
puts matches.inspect # Output: ["123", "456"]
Penjelasan:
scan
mengembalikan semua pencocokan dalam bentuk array.
d. gsub
dan sub
:
sub
: Mengganti pencocokan pertama dengan string baru.
Contoh:
text = "hello world"
new_text = text.sub(/world/, 'Ruby')
puts new_text # Output: hello Ruby
Penjelasan:
-
sub
mengganti hanya pencocokan pertama. -
gsub
: Mengganti semua pencocokan dengan string baru.
Contoh:
text = "hello world, hello universe"
new_text = text.gsub(/hello/, 'hi')
puts new_text # Output: hi world, hi universe
Penjelasan:
gsub
mengganti semua instance dari pola dalam string.
Metode Regex Tambahan #
a. match?
:
Metode match?
(sejak Ruby 2.4) memeriksa apakah pola cocok dengan string dan mengembalikan boolean.
Contoh:
pattern = /hello/
text = "hello world"
result = pattern.match?(text)
puts result # Output: true
Penjelasan:
match?
memberikan hasil boolean tanpa membuat objekMatchData
.
b. named captures
:
Menggunakan grup bernama dalam regex untuk menangkap dan mengakses bagian tertentu dari string.
Contoh:
pattern = /(?<greeting>\w+) (?<name>\w+)/
text = "hello world"
match_data = pattern.match(text)
if match_data
puts "Greeting: #{match_data[:greeting]}"
puts "Name: #{match_data[:name]}"
end
Penjelasan:
(?<greeting>\w+)
menangkap kata pertama sebagai:greeting
.(?<name>\w+)
menangkap kata kedua sebagai:name
.
Contoh Regex dan Pola #
a. Mencocokkan Email:
Contoh:
email_pattern = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
email = "[email protected]"
if email =~ email_pattern
puts "Valid email address."
else
puts "Invalid email address."
end
Penjelasan:
\A
dan\z
memastikan pencocokan dari awal hingga akhir string.i
di akhir pola membuat pencocokan tidak sensitif terhadap huruf kapital.
b. Mencocokkan Nomor Telepon:
Contoh:
phone_pattern = /\A\(\d{3}\) \d{3}-\d{4}\z/
phone = "(123) 456-7890"
if phone =~ phone_pattern
puts "Valid phone number."
else
puts "Invalid phone number."
end
Penjelasan:
\d{3}
mencocokkan tiga digit angka.\(\d{3}\)
mencocokkan kode area dalam tanda kurung.
c. Mencocokkan Tanggal dalam Format YYYY-MM-DD:
Contoh:
date_pattern = /\A\d{4}-\d{2}-\d{2}\z/
date = "2024-08-24"
if date =~ date_pattern
puts "Valid date format."
else
puts "Invalid date format."
end
Penjelasan:
\d{4}
mencocokkan tahun.\d{2}
mencocokkan bulan dan hari.
5. Grup dan Ekspresi Regulernya #
a. Grup Kecil dan Grup Besar:
Contoh:
pattern = /(hello) (world)/
text = "hello world"
match_data = pattern.match(text)
if match_data
puts "Full match: #{match_data[0]}"
puts "Group 1: #{match_data[1]}"
puts "Group 2: #{match_data[2]}"
end
Penjelasan:
(hello)
menangkaphello
sebagai grup 1.(world)
menangkapworld
sebagai grup 2.
b. Non-Capturing Grup:
Contoh:
pattern = /(?:hello) (world)/
text = "hello world"
match_data = pattern.match(text)
if match_data
puts "Full match: #{match_data[0]}"
puts "Group 1: #{match_data[1]}"
end
Penjelasan:
(?:hello)
adalah grup non-capturing, sehingga hanyaworld
yang ditangkap dalam grup 1.
Kesimpulan #
Regex di Ruby adalah alat yang sangat kuat untuk pencocokan dan manipulasi string. Dengan berbagai metode dan kemampuan, Anda dapat melakukan pencocokan pola yang kompleks, mengganti bagian-bagian string, dan menangkap data terstruktur dari teks. Memahami cara menggunakan regex secara efektif akan membantu Anda dalam berbagai tugas pemrograman terkait string. Jika Anda memiliki pertanyaan lebih lanjut atau memerlukan klarifikasi tambahan, jangan ragu untuk bertanya!