71
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Regex(正規表現)の基本的な文法

Last updated at Posted at 2018-08-20

はじめに

sample.txt
aaa bbb ccc ddd eee

sample.txt ファイル内の文字列の間のスペースをコンマに変えたいとしよう。
(あくまで例えであり、実際にこのような作業が必要であるかは分からない)
この場合、スペースは 4 つだけなので手作業で変更してもさほど苦労はしないだろう。
しかし、これが 1 行ではなく、10000 行続いていたらどうだろう?
そんなものを手作業でやってたら日が暮れてしまいそうだ。
そんな時に便利なのが Regex(正規表現)である。
正規表現を使えばコマンド一つで、死ぬほど面倒くさい作業も一発である。

正規表現とは何か?

正規表現とはテキストから検索したい「文字列の表現方法」である。
単なる文字列だけでなく、「aから始まる単語」や「数字のみの行」などの細かい条件の指定が可能である。
よく Linux の grepコマンドと合わせて利用される。

正規表現の書き方

「apple」のように単語や文字そのものを検索パターンとすることをリテラルと言う。
これだと普通の検索と同じである。
正規表現ではメタ文字という特殊な記号を使うことで、もっと複雑な検索パターンを作ることができる。

メタ文字

.(ドット)

改行を除く任意の一文字にマッチさせることができる。
例 1 :a.pとすると「app」や「arp」などがマッチする。
例 2 :a..leとすると「apple」がマッチする。

.自身を検索したいときは.の前に\を付けてエスケープしなければならない。

文字種の限定

下記の記号を使うと、数字や文字など文字種を指定できる。

記号 機能
\d 0-9 の数字 1 文字を指す
\D \d 以外の 1 文字を指す
\w a-z、A-Z、0-9、_ の内の 1 文字を指す
\W \w 以外の 1 文字を指す
\s スペース、タブ、改行などを指す
\S \s 以外の 1 文字を指す

量指定子

文字種を限定しただけだと、例えば「word」を検索したい時、 \w\w\w\w のように同じものを何回も書く必要がある。
量指定子を使うと先程の \w\w\w\w\w{4} と書くことができ、見た目をスッキリとさせられる。

量指定子 機能
{n} n 個連続する
{min,max} min 以上、max 以下の個数連続する
{min,} min 以上の個数連続する
? {0,1} と同義
+ {1,} と同義
* {0,} と同義

アンカー

アンカーを使えば行の先頭にある単語のみや、末尾の文字のみといったマッチしてほしい位置を指定できる。

アンカー 機能
^ 行の先頭
$ 行の末尾
\bで挟む 単語の境界

選択子

abc|123という風に|を間に入れると「または」的な意味になる。
そのため、この場合は「abc」か「123」を検索できる。
両方あれば両方にマッチする。

文字クラス

[]で囲むと[]内にある文字のどれか 1 文字を検索できる。
[abc]とすると「a」か「b」か「c」のどれか 1 文字にマッチする。(a|b|cと同じ意味)

文字クラス内で使えるメタ文字

文字クラスの[直後^を置くと否定を表現できる。
[^ab]Pとすると「a」または「b」以外を表せる。

-で文字コードの範囲を指定できる。
[a-z]とすると「a」「b」「c」・・・「y」「z」のどれか 1 文字を検索できる。

※文字クラス内のメタ文字を文字クラス内でリテラルとして使いたい場合は/でエスケープする必要がある。

改行とタブ

改行コードは Windows や macOS などのシステムによって異なるため注意したい。

タブと改行コード 説明
\t タブ
\r\n 改行(Windows)
\r 改行(v9 までの macOS )
\n 改行(Unix、v10 以降の macOS)
\r\n|\r|\n 改行(すべて)

キャプチャ

検索パターンにおいて、置換で利用したい部分を()で囲んでおくと、囲った順に$1$2・・・で置換の際に文字列を取り出して利用できる。
()で囲んだパターンにマッチする文字列を正規表現中で使うこともできる。
例えば(\d),\1とすると\d\1は同じものを指し、「1,1」や「5,5」などがマッチする。

おわりに

今回は一般的な正規表現の文法を説明した。
正規表現はエディタや Linux 、プログラミング言語などいろんな場面で利用できるが、多少ルールの違いがあるかもなので適宜マニュアルを参照するといいだろう。

参考文献

71
66
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?