たまに一括で文字を検索して特定の文字列に置換することがあります。これが普段から行っている作業であれば覚えるのですが、本当にたまになので覚える気が起きずその都度調べて四苦八苦するという状況に陥ります。
そこで、個人的に置換時に使用頻度の高い正規表現を備忘録として残しておくことにしました。詳しい方からすれば間違いがあるかもしれませんが、細かいことは気にせず自分の理解しているとおりに残しておこうと思います。
後ろから○文字目以降を指定する正規表現
例えば「本日は晴天なり」の最後の2文字を指定して置換したい場合は「..$」を指定すればOKです。置換した文字を「!」に指定して置換を実行すると
「本日は晴天!」
となります。正規表現の「.」は文字の種類に関係なく1文字を意味します。そして「$」は「$」よりも前の部分を指します。文字数さえはっきりしていれば「.」の数を増やすことで文字数を指定できます。ちなみに文字数が増えると「.」の入力もしんどいので「.{10}$」とすることで、後ろから10文字分を指定できます。「{}」で囲むことによって直前の文字数を数字でしていできるということです。
前から○文字目以降を指定する正規表現
「本日は晴天なり」という文の最初の2文字を指定して置換する場合は「^..」を指定すればOKです。置換する文字を「明日」に指定して置換を実行すると
「明日は晴天なり」
となります。先程も出てきた「.」は文字数を表すことはもうわかっていることだと思います。今回出てきたのは「^」です。これは簡単に言うと先頭を意味します。厳密にはこれの直後にくる文字列を先頭として認識するようです。もちろんこちらも「^.{10}」で前から10文字分を指定することができます。
特定の文字から特定の文字までを指定する正規表現
「本日は晴天なり」のうち、「日」から「天」まで、つまり「は晴」までを指定して置換したい場合は「日.*天」を指定して検索します。この部分を「来は雨天」として置換すると
「本来は雨天なり」
となります。今回始めて出てきた「*」は単体では正規表現ではワイルドカードとしては扱われず、「0回以上繰り返す」という意味となります。ちょっと分かりづらいですね。
先程の例を見てみると、「.」で文字数を、「*」で「.」を0回以上繰り返す、ということをしています。「*」は単体ではワイルドカードにはなりませんが、「.*」とすることでワイルドカードとして使うことができるというわけです。
そして、今回は特定の文字から特定の文字までを指定するために「.*」の前と後ろにそれぞれ「日」と「天」を入力して「日.*天」としています。
注意が必要なのは、「日」も「天」も含まれるということ。ここだけ注意して使うようにしましょう。
難しく考えず必要なものだけ覚えればよし
正規表現が使えるとちょっとしたことも一括で行えるようになって便利なのですが、いざ使おうと思って検索すると結構難しい文章が並んでいることが多くて行いたい作業の前に面倒なことになる、なんて経験をする方も少なくないかもしれません。
私は覚える気は更々ないので、使用頻度の高いものだけをメモしてとっておくことにしています。今回の記事の内容がそれなのですが、正規表現の意味というか機能まで記載しているのは個人的に意味や機能を知らないと、使っているうちに「なんでこうなるんだろう」と疑問に思うことが多かったので、その疑問の解消を兼ねて一緒に残していたものを編集してこちらにも残しておきました。
今回記載した3つだけでも覚えておくと損はないので私のように「なんでこうなるの?」とか難しく考えず、とりあえず「こうすればこうなる」といった感覚で覚えておくと良いと思います。また何か正規表現で比較的使っているものがあったら追記していきます。
Tweet
シェアしていただけると嬉しいです