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 =~ patternmemberikan 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:
scanmengembalikan 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:
-
submengganti 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:
gsubmengganti 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:
\Adan\zmemastikan pencocokan dari awal hingga akhir string.idi 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)menangkaphellosebagai grup 1.(world)menangkapworldsebagai 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 hanyaworldyang 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!