Rails Insights

Patrymau Rheolaidd yn Ruby

Mae patrymau rheolaidd, neu "regular expressions" (regex), yn offeryn pwerus ar gyfer chwilio a thrawsnewid testun. Mae Ruby, fel iaith raglennu, yn cynnig cymorth ardderchog ar gyfer defnyddio patrymau rheolaidd. Yn yr erthygl hon, byddwn yn archwilio sut i ddefnyddio patrymau rheolaidd yn Ruby, gan gynnwys enghreifftiau, cyngor, a rhai awgrymiadau defnyddiol.

Beth yw Patrymau Rheolaidd?

Mae patrymau rheolaidd yn gyfuniad o nodau sy'n cynrychioli testun. Mae'n bosib eu defnyddio i chwilio am, a thrawsnewid, testunau yn effeithiol. Mae patrymau rheolaidd yn ddefnyddiol ar gyfer:

  • Chwilio am eiriau neu frawddegau penodol.
  • Gwrthdroi neu newid testun.
  • Validasi data, fel cyfeiriadau e-bost neu rifau ffôn.

Sut i Ddefnyddio Patrymau Rheolaidd yn Ruby

Mae Ruby yn cynnig sawl dull o ddefnyddio patrymau rheolaidd. Mae'r dulliau hyn yn cynnwys y dullau =~, match, a scan. Gadewch i ni edrych ar bob un ohonynt yn fanwl.

Dull =~

Mae'r dull =~ yn caniatáu i chi wirio a yw patrymau rheolaidd yn cyd-fynd â thestun. Mae'n dychwelyd y lleoliad cyntaf y gellir ei ddod, neu nil os nad yw'n cyd-fynd.

testun = "Helo, byd!"
patrwm = /Helo/

if testun =~ patrwm
  puts "Mae'r patrwm yn cyd-fynd!"
else
  puts "Nid yw'r patrwm yn cyd-fynd."
end

Dull match

Mae'r dull match yn dychwelyd gwrthrych MatchData os yw'r patrwm yn cyd-fynd â'r testun. Mae hyn yn caniatáu i chi gael mwy o wybodaeth am y gytundeb.

testun = "Helo, byd!"
patrwm = /Helo/

if (match = testun.match(patrwm))
  puts "Mae'r patrwm yn cyd-fynd: #{match[0]}"
else
  puts "Nid yw'r patrwm yn cyd-fynd."
end

Dull scan

Mae'r dull scan yn dychwelyd pob gytundeb yn y testun. Mae hyn yn ddefnyddiol pan fyddwch am ddod o hyd i bob achos o'r patrwm.

testun = "Helo, byd! Helo, Ruby!"
patrwm = /Helo/

matches = testun.scan(patrwm)
puts "Cafwyd #{matches.length} gytundeb(au): #{matches.join(', ')}"

Patrymau Rheolaidd a Nodau Arbennig

Mae patrymau rheolaidd yn cynnwys nodau arbennig sy'n cynrychioli gwahanol ddynodiadau. Dyma rai o'r nodau mwyaf cyffredin:

  • . - Mae'n cynrychioli unrhyw nod.
  • * - Mae'n cynrychioli unrhyw nifer o nodau (gan gynnwys dim).
  • + - Mae'n cynrychioli un neu fwy o nodau.
  • ? - Mae'n cynrychioli dim ond un nod neu ddim o gwbl.
  • ^ - Mae'n cynrychioli dechrau llinell.
  • $ - Mae'n cynrychioli diwedd llinell.
  • [ ] - Mae'n cynrychioli unrhyw un o'r nodau a restrwyd.
  • ( ) - Mae'n cynrychioli grwpiau o nodau.

Enghreifftiau o Ddefnydd Patrymau Rheolaidd

Gadewch i ni edrych ar rai enghreifftiau mwy cymhleth o sut i ddefnyddio patrymau rheolaidd yn Ruby.

Validasi Cyfeiriad E-bost

def valid_email?(email)
  patrwm = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
  return email =~ patrwm ? true : false
end

puts valid_email?("enw@enghraifft.com") # Dylai dychwelyd true
puts valid_email?("enw@enghraifft")     # Dylai dychwelyd false

Chwilio am Nifer Ffôn

def valid_phone_number?(number)
  patrwm = /^\+?[0-9]{1,3}?[-. ]?([0-9]{1,4}[-. ]?){1,3}[0-9]{1,4}$/
  return number =~ patrwm ? true : false
end

puts valid_phone_number?("+44 20 7946 0958") # Dylai dychwelyd true
puts valid_phone_number?("12345")            # Dylai dychwelyd false

Cyngor a Awgrymiadau

Wrth ddefnyddio patrymau rheolaidd, mae rhai cyngor a awgrymiadau y gallech eu hystyried:

  • Defnyddiwch grwpiau i ddelio â phatrwmau cymhleth.
  • Cadwch eich patrymau mor syml â phosib i ddechrau, yna ychwanegwch gymhlethdod yn raddol.
  • Defnyddiwch y dull inspect ar wrthrychau MatchData i weld manylion am y gytundeb.
  • Peidiwch â bod yn ofni defnyddio nodau arbennig; maen nhw'n gwneud eich bywyd yn haws!

Casgliad

Mae patrymau rheolaidd yn Ruby yn cynnig dull pwerus a hyblyg ar gyfer gweithio gyda thestun. Gyda'r wybodaeth a'r enghreifftiau a rennir yn yr erthygl hon, gobeithiwn y byddwch yn teimlo'n hyderus wrth ddefnyddio patrymau rheolaidd yn eich prosiectau Ruby. Peidiwch ag anghofio ymarfer a phrofi eich patrymau rheolaidd i ddod o hyd i'r dulliau sy'n gweithio orau i chi!

Published: August 13, 2024

© 2024 RailsInsights. All rights reserved.