こんにちは。
けいぞうです。
「正規表現」って聞いたことあるでしょうか?
この記事にたどり着いたということは、聞いたことはあると思います。
「正規表現って聞いたことあるけど何?」
「正規表現って何だったか忘れちゃった・・・」
今回はこんな疑問を持っている方に向けて記事を作成しました。
細かい話は置いておいて、ざっくり概要を理解してもらえると思います。
[目次]
目次
正規表現とは?簡単に説明
一言で説明すると
「文字列のパターンを表現する方法」
のことです。
これだけでは意味不明だと思うので、いくつか例をあげます。
例1)
(こぶし|つばき)ファクトリー
このような正規表現があった場合これは
「こぶしファクトリー」「つばきファクトリー」
両方の文字列を意味します。素晴らしいですね。
例2)
た[か-こ]
これは
「たか」「たき」「たく」「たけ」「たこ」
の5つの文字列を意味します。便利ですね。
例3)
.*カレー
これは「○○カレー」のように、「カレー」の前に何かが付く文字列を表します。
「カツカレー」「チキンカツカレー」「シーフードカレー」など
これらは全て「.*カレー」と合致します。最高ですね🍛
このように、1つの表記で複数の文字列を表すことができるのが、「正規表現」というものになります。
例をもう少し詳しく解説
例のように、正規表現には書き方にルールがあって、
ルール通りに書くことで、複数の文字列を表すことできます。
例1)
(こぶし|つばき)ファクトリー
例1では2つのルールを使っています
1つ目は パイプ「コレ→|」 です。
2つ目は 丸かっこ「これ→()」 です。
パイプで分けられた文字は「どちらか」を意味します。
つまり例の場合は、「こぶし」か「つばき」かどちらか、という意味になります。複数区切って、3つ以上のうちのどれか、という風にすることもできます。
(こぶし|つばき|全力)ファクトリー
この場合は
「こぶしファクトリー」「つばきファクトリー」「全力ファクトリー」
の3つを意味することになります。
そのどれかを指定する範囲を決めるのが丸かっこになります。
丸かっこは、このように文字を1つのグループにまとめるときに使用しますが、大体よく使うのはこの「|」と一緒に使うパターンの場合ですね。
例2
た[か-こ]
例2では2つのルールを使っています。
1つ目は角かっこ「これ→[]」です。
2つ目はハイフン「これ→-」です。
角かっこは、「かっこに含まれる文字のどれか1つ」を意味します。
そしてハイフンは「どこからどこまでの範囲か?」を表すときに使います。
したがって、[か-こ]は、「か、き、く、け、こ」のどれか1文字を表します。
ハイフンを使わない場合は、このように表すこともできます。
た[かきくけこ]
こう書いても、「た[か-こ]」でも全く同じ意味です。
例3
.*カレー
例3でも2つのルールを使っています。
1つ目はドット「.」
2つ目はアスタリスク「*」です。
ドットは「何でもいい1文字」を表します。
そして、アスタリスクは「直前の文字の0回以上の繰り返し」を表します。
つまり「.*」は「何でもいい1文字の0回以上の繰り返し」
→ということは、全ての文字列を表すと言うことになります。
どんな時に使うのか
よく使うのはこんなときです
- 文書中の表記の揺れを一括置換で修正したいとき
- 特定の文字列を含むテキストファイルやその行を検索したいとき
- 入力されたメールアドレスが正しい形式かチェックするとき
①文書中の表記の揺れを一括置換で修正
例えばこんな表現があるとき
「ユーザーマスター」「ユーザーマスタ」「ユーザマスター」「ユーザマスタ」
1つの設計書を複数の人が加筆修正すると、こんな感じで表記の揺れが発生することが多々あります。
こんな時に正規表現を使った置換が便利です。
上記4つは、正規表現でこう表せます。
ユーザ(ー?)マスタ(ー?)
これを検索して「ユーザーマスタ」とか、合わせたい表現に置換してあげれば一発で修正ができます!
私が良く使うのは「サクラエディタ」の正規表現置換です。便利です。
② 特定の文字列を含むテキストファイルやその行を検索
シチュエーションは違いますが、考え方は①と同じで、特定の文字列をテキストファイルなどから検索するときによく使います。
例えば、テキストの中で「○○個」のように、物の個数について記述している個所を洗い出したいとき(そんなシチュエーションがあるかは置いておいて)、単純に「個」で検索してもいいけど、
それだと「個人」とか「個別」とか、欲しいもの以外も検索で引っかかっちゃいます。
こういうときに正規表現が便利です。
([0-9]+)個
このように書けば、○○個と、数字+個で書かれている部分のみを抽出することができます。
③ 入力されたメールアドレスが正しい形式かチェックする
メールアドレスの形式にはいくつか決まったルールがあります。
何かのウェブサービスを作るときに、ユーザーに入力してもらったメールアドレスの形式がおかしくないか、チェック処理を入れることが良くあります。
あくまで一例ですが、こんな風にするとメールアドレス風の文字列かどうか判断できます。
^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$
この正規表現の意味としては、
・先頭の文字は英数字のみ
・先頭以外の@以前の文字は英数字か「.」か「_」か「-」のみ
・@を必ず含む
・@直前の文字は英数字は「_」か「-」のみ
・@以降の直前以外の文字は英数字か「.」か「_」か「-」のみ
といった感じです。
これに合致しない文字列がテキストボックスに入力された場合は
「なんかおかしいよ!」と、エラーメッセージを出してあげるとか、そんな風に使います。
まとめ
正規表現とは
「1つの書き方で複数の文字列を表現することができる表現方法」
のことでした。
正規表現には書き方にルールがあって、それを使いこなせばどんな文字列のパターンも表すことが可能です。
次回は、そのパターンを記述するためのルールについて詳しく説明していきます。
最近のコメント