unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Regex

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 objek MatchData.

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) menangkap hello sebagai grup 1.
  • (world) menangkap world 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 hanya world 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!

« Date & Time
Rubygems »