はじめに
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 、プログラミング言語などいろんな場面で利用できるが、多少ルールの違いがあるかもなので適宜マニュアルを参照するといいだろう。
参考文献
- RegexOne
- ドットインストール「エディタで学ぶ正規表現入門」
- 三宅英明・大角祐介(2015)「新しい Linux の教科書」 SB クリエイティブ.