正規表現(regexに短縮)は、文字列で見つかったパターンを操作するために使用されます。 彼らはあなたが何をするように指示するかに応じて、文字列の特定の部分を見つけたり、置き換えたり、削除したりすることができます。 Rubyでは、それらは常に2つのスラッシュの中に含まれています。例えば、
を使用します。文字列のgsubメソッド:
sentence = "This is a sample sentence."
sentence.gsub(/a/, "") #returns "This is smple sentence."
ザ.gsubメソッドは、引数の後半が空であるため、文字列内のすべてのaを検索して削除します。 引用符の間に何かを追加する場合:
sentence.gsub(/This/, "*") #returns "* is a sample sentence."
は、”This”のすべてのインスタンスを検索し、アスタリスク(*)に置き換えます。 この機能を逆にする方法もありますが、正規表現の前にキャレット(^)を追加すると逆になります:
sentence.gsub(//, "*") #returns "********a**a**************"
すべてのもの(スペースを含む!)aではない文字列では、アスタリスクに置き換えられています。 この機能を適用するには、角括弧()が必要であり、それらがなければgsubは何もしないことに注意してください。
数字や文字の範囲を正規表現に渡すことで、アルファベットのすべての文字や0から9までのすべての数字を入力する必要がなくなります。
sentence = "Th1s 1s a sampl3 s3nt3nc3."
sentence.gsub(//, "!") #these return the same thing
sentence.gsub(//, "!") # "Th!s !s a sampl! s!nt!nc!."
および文字範囲の場合:
sentence.gsub(//, "🔥")
#returns "🔥🔥1🔥 1🔥 🔥 🔥🔥🔥🔥🔥3 🔥3🔥🔥3🔥🔥3."
A-Zにはすべての大文字が含まれ、a-zにはすべての小文字が含まれます。 だから、このgsubはすべての文字を削除し、火の絵文字に置き換えています。
ショートカット
正規表現に渡されるものを単純化するために利用可能な多くの便利なショートカットがあります。 ここで私がこれまでに見つけた最も有用なものをいくつか紹介します:
- \すべての文字と数字をターゲットにするためのw:
lorem = "Lorem ipsum."
lorem.gsub(//, "wow") #returns "wowwowwowwowwow wowwowwowwowwow."
• \逆を行うにはW(以下の例では、最後のスペースとピリオドを”wow”に置き換えています”):
lorem.gsub(//, "wow") #returns "Loremwowipsumwow"
- \すべての整数をターゲットにするためのd:
lorem = "L0r3m 1psum"
lorem.gsub(//, "-") #returns "L-r-m -psum."
- \dは反対を行うには
lorem.gsub(//, "-") #returns "-0-3--1-----"
そこに多くのより多くのショートカットがあり、私が見つけたこのための素晴らしいリソースはRubularです、それはそれらのリストを持っており、あなたがブ
ブロック
ブロックは、どのように変更するために使用できます。gsubは動作します。 文字列内のすべての単語を大文字にする例を次に示します:
cool_phrase = "slow lorises are cool"
cool_phrase.gsub(/\w+/) {|word| word.capitalize}
#returns "Slow Lorises Are Cool"
注:\wの後の”+”記号は、1つ以上の文字を持つ各単語を選択しています。 “+”がなければ、文字列全体が大文字になります。
文字列内の数値が増分される別の例を次に示します:
year = "The year is 3100"
year.gsub(/\d+/) {|num| num.to_i + 1} #returns "The year is 3101"
注:ここでも、”+”記号は、全体として1つ以上の番号を持つ各番号を選択しています。 それがなければ、各数値を個別に増分するため、「年は4211です」という戻り値が返されます。
ユースケース
正規表現は、多くの場合、ユーザー入力を検証またはフィルタリングするために使用されます。 あなたのウェブサイトにユーザーの電話番号を取る形態があることを想像しなさい。 数値を整数としてのみ取得するためにシンボルを削除する例を次に示します:
phone_number = "(123)456-7890"
phone_number.gsub(/, ""/) #returns "1234567890"
ユーザーの名前を取得するときは、文字列のみを取得し、数値または記号である入力したものを削除すると便利です。
steve = "St97eve Brul()*)e "
steve.gsub(//, "").split(/(?=)/).join(" ")
#returns "Steve Brule"
上記の例は少し複雑に見えますが、すべての記号と数字を削除し、大文字の場所に基づいて結果を配列に分割し、文字列に結合するだけです。
結論とリソース
正規表現と.gsubは、あなたのプログラムを強化することができます強力なツールですが、読んで、それらを把握しようとすると、あなたが象形文字を読んでいるように 私はそれらを学び、それらを一つずつ把握することを試みるあなたの時間をかけることを推薦する。 これを行うと、すぐに正規表現のマスターになります!