
Ruby Logo
Det finns ett uttryck som går: Du har ett problem, bestämmer dig för att lösa det med ett reguljärt uttryck, nu har du två problem. Det ligger något i den kritiken; få programmeringsspråk är så svåra att debugga som just reguljära uttryck. Samtidigt finns det många lockelser i att använda dem, då det i många fall går att ersätta en rad instruktioner av vanlig sträng parsing med ett välformulerat reguljärt uttryck. Speciellt bekvämt blir det i ett språk som Ruby. Ta följande exempel:
> day, month, year = /(\d+)(?:\/|:)(\d+)(?:\/|:)(\d+)/.match(”3/11/2009″).captures
När detta exekverats har ”day” värde 3, ”month” värde 11 och ”year” värde 2009. Inga sträng operationer och genom Rubys syntax, inte ens något explicit matchande av array element.
Genom att Ruby inte har några specifika tecken för att indikera att en variabel är just en variabel finns det också möjligheten att kombinera syntaxen för ”backreference” ($1 … n för matchade subuttryck) :
> /(\d+)(?:\/|:)(\d+)(?:\/|:)(\d+)/.match(”3/11/2009″)
> puts ”dag: ” + $1 + ” månad: ” + $2 + ” år: ” + $3
dag: 3 månad: 11 år: 2009
Som sista exempel kommer Rubys gsub metod för strängar:
> ”3/11/2009″.gsub(/\d+/){ |n| ((n.to_i) + 1).to_s}
”4/12/2010″
Det gsub-metoden gör är att matcha ett reguljärt uttryck och (i det här fallet) passera matchingen genom ett block kod och använder resultatet av koden som värde för ersättning. Blocket kod i det här fallet tar bara värdet som matchats och returnerar värdet plus ett.



