はじめに
正規表現について、初学者が自分なりにまとめたことをアウトプットします。
正規表現とは何か、正規表現の記法、注意点、使用例の順で解説します。
初学者向けの取っ掛かりになればと思います。
正規表現とは
正規表現とは、特定のパターンの文字列を表現する記法です。
「Aで始まりNで終わる英字6文字の文字列」「数値で始まり英字で終わる行」等特定のパターンの文字列を柔軟に表現する記法です。
正規表現を覚えることで、文字列検索・抽出・置換等文字列操作を素早く行え、作業効率upを見込めます。
正規表現の記法
正規表現の記法について解説します。
基本的な正規表現
基本的な正規表現について解説します。
使用例と、マッチする文字列の例も解説します。
文字 | 意味 | 正規表現の例 | マッチする例 |
---|---|---|---|
. | 改行を除く任意の1文字 | AB.C | ABDC, ABEC等 |
* | 直前の文字の0文字以上の繰り返し | AB*C | AC, ABBBC等 |
+ | 直前の文字の1文字以上の繰り返し | AB+C | ABC, ABBBBBC等 |
? | 直前の文字が0個or1個 | AB?C | AC, ABC |
上記文字を組み合わせたパターンについて解説します。
文字 | 意味 | 正規表現の例 | マッチする例 |
---|---|---|---|
.* | 任意の0文字以上 | AB.*C | ABC, ABDEFGHIC等 |
.+ | 任意の1文字以上 | AB.+C | ABDC, ABDEFGHIC等 |
*? | 直前の文字を0回以上繰り返す | AB*?C | AC, ABDEDEDEC等 |
+? | 直前の文字を1回以上繰り返す | AB+?C | ABC, ABDEDEDEC等 |
?? | 直前の文字を0回or1回繰り返す | AB??C | AC, ABC |
グルーピング
グルーピングについて解説します。
使用例と、マッチする文字列の例も解説します。
文字 | 意味 | 正規表現の例 | マッチする例 |
---|---|---|---|
| | OR条件 | ABC|ADC | ABC, ADC |
[ ] | [ ]内に含まれるいずれか1文字にマッチ | AB[DEF]C | ABDC, ABEC, ABFC |
[^ ] | [ ]内に含まれる文字以外にマッチ | AB[^DEF]C | ABBC, ABGC等 |
( ) | 文字を1つのグループにまとめる | AB(DE|FG)C | ABDEC, ABFGC |
{n} | 直前の文字の桁数を指定 | AB{3}C | ABBBC |
{n,} | 直前の文字の最小桁数を指定 | AB{3,}C | ABBBC, ABBBBBBC等 |
{n,m} | 直前の文字の最小桁数と最大桁数を指定(最長一致) | AB{3,5}C | ABBBC, ABBBBC, ABBBBBC |
{n,m}? | 直前の文字の最小桁数と最大桁数を指定(最短一致) | AB{3,5}?C | ABBBC, ABBBBC, ABBBBBC |
※|は半角です。 |
特定の位置関係
特定の位置関係について解説します。
使用例と、マッチする文字列の例も解説します。
文字 | 意味 | 正規表現の例 | マッチする例 |
---|---|---|---|
^ | 文字列の先頭を表す | ^ABC | ABC, ABCDEFG..等 |
$ | 文字列の末尾を表す | ABC$ | ABC, ..xyzABC等 |
\b | 単語の先頭or末尾 | \bABC | ABC, ABCDEF等 |
ABC\b | ABC, XYZABC等 | ||
\B | 単語の先頭でも末尾でもない | \BABC | ZABCD, XYZABCDEF等 |
ABC\B | ZABCD, XYZABCDEF等 |
定義済みの正規表現
定義済みの正規表現について解説します。
別表現があれば、それも解説します。
| 文字 | 意味 | 言い換え |
|:----:|:----:|:----:|:----:|
| \t | 水平タブ | - |
| \v | 垂直タブ | - |
| \f | フォームフィード(改ページ) | - |
| \r | 改行(CR) | - |
| \n | 改行(LF) | - |
| \a | ベル | - |
| \s | 空白文字(※垂直タブ除く) | [ \t\f\r\n] |
| \S | 空白文字以外 | [^ \t\f\r\n] |
| \l | 半角英小文字 | [a-z] |
| \L | 半角英小文字以外 | [^a-z] |
| \u | 半角英大文字 | [A-Z] |
| \U | 半角英大文字以外 | [^A-Z] |
| \d | 数値 | [0-9] |
| \D | 数値以外 | [^0-9] |
| \w | アルファベット、アンダーバー、数値 | [a-zA-Z_0-9] |
| \W | アルファベット、アンダーバー、数値以外 | [^a-zA-Z_0-9] |
注意点
正規表現を扱ううえでどつぼに嵌まりやすいポイントを3点解説します。
-
特定の文字を扱う際、\でエスケープする必要がある
例えば、+を「1回以上の繰り返し」という意味ではなく「+という文字」として扱いたい場合、ただ「+」と入力するだけでは前者で解釈されてしまいます。
後者で使用したい場合、\+と入力する必要があります。
\を使用して、前者で解釈されることを防ぐ必要があります(エスケープと言います)。 -
行頭行末は忘れがち
行頭を表す「^」や行末を表す「$」の条件指定をついつい忘れがちです。 -
ツールによっては使えない正規表現がある
例えば、?はperl(※プログラミング言語のひとつ)では使えますが、sed(※linuxで文字列置換等ができるコマンド)では使えません。
意図した結果にならない可能性があるので、注意が必要です。
例
正規表現を使用した例と、記法の意味について解説します。
- 郵便番号
\d{3}-\d{4}
(3ケタの数値) - (4ケタの数値) という意味です。
- 携帯電話番号
0[789]0-\d{4}-\d{4}
0(7 or 8 or 9)0 - (4ケタの数値) - (4ケタの数値) という意味です。
- 固定電話番号
0\d(-\d{4}|\d-\d{3}|\d{2}-\d{2}|\d{3}-\d|)\d{4}
以下のいずれかのパターンを指します。
・ 0△-□□□□-××××
・ 0△△-□□□-××××
・ 0△△△-□□-××××
・ 0△△△△-□-××××
末尾は4ケタの数値固定です。
- メールアドレス
\w+([\-\+\.]\w+)*@\w+([\-\.]\w+)*.\w+([\-\+\.]\w+)*
\w+ :アルファベット、アンダーバー、数値の1回以上の繰り返し..(※1)
[\-\+\.] :-か+か.のいずれか..(※2)
([\-\+\.]\w+)*:(※1)または(※2)の0回以上の繰り返し
- URL
https?://([\w\-]+\.)+[\w\-]+(/[\w\-\./\?%&=]*)?
? :直前の文字が0個or1個
[\w\-]+ : [アルファベット、アンダーバー、数値、ハイフン]の1回以上の繰り返し..(※3)
. :「.」という文字..(※4)
([\w-]+.)+ :(※3)または(※4)の1回以上の繰り返し
[\w\-\./?%&=]*:[アルファベット、アンダーバー、数値、ハイフン、ドット、スラッシュ、?、%、&、=]の1回以上の繰り返し..(※5)
(/[\w-./?%&=]*)?:/ または(※5)が0個or1個
おわりに
正規表現について解説しました。
著者は正規表現に対して苦手意識を持っていました。
よく分からない記号がずらずら並んでいて、何を言っているかサッパリでした。
ただ、知識を習得すれば応用が利きやすいと思います。
くわえて、知識習得のハードルはそれほど高くないと思います。
便利なのでぜひ覚えてみてください。
参考元
記事作成にあたり、以下のサイトを参考にしました。
・https://murashun.jp/article/programming/regular-expression.html
・https://www.tohoho-web.com/ex/regexp.html
・https://www.ne.jp/asahi/futohen/sankaku/h085.htm
・https://www.megasoft.co.jp/mifes/seiki/s310.html