はじめに
正規表現が分かりにくいと感じる原因は、
文法を知らないことよりも
アンカーやメタ文字の捉え方が曖昧なことにあると感じています。
この記事では、サクラエディタを使って
正規表現で特につまずきやすい
「アンカー」と「メタ文字」 に絞って解説します。
この記事はこんな人向け
- 正規表現が苦手で、毎回ググりながら使っている
-
^や$、.の挙動がよく分からない - サクラエディタでログ調査や文字列整形をしている
- 正規表現を暗記ではなく、理解して使いたい
※ 本記事の正規表現は、主に サクラエディタ での利用を想定しています。
正規表現とは
正規表現とは、文字列のパターンを指定するための書き方です。
通常の検索では難しい、
- 行の先頭だけ探したい
- 数字だけを抽出したい
- 特定の形式の文字列をチェックしたい
といった条件を指定できます。
正規表現では、メタ文字と呼ばれる特別な記号を使って
これらの条件を表現します。
なお、Java や Perl、テキストエディタなど、
ツールによって一部使える表現が異なる点には注意が必要です。
正規表現における「メタ文字」とは
メタ文字とは、
それ自体が特別な意味を持つ文字 のことです。
通常の文字とは異なり、
正規表現の中では「役割」を持って動作します。
メタ文字一覧
※一覧を見ると多く感じますが、
この記事では「意味がある文字がある」ことを知ってもらうのが目的です。
| メタ文字 | 意味 | 補足 |
|---|---|---|
. |
任意の1文字 | 改行にはマッチしない |
^ |
行の先頭 | アンカー(位置指定) |
$ |
行の末尾 | アンカー(位置指定) |
[] |
指定した文字のどれか1文字 | 文字クラス |
[^ ] |
指定した文字以外 | 否定文字クラス |
* |
直前の文字の繰り返し(0回以上) | 量指定子 |
+ |
直前の文字の繰り返し(1回以上) | 量指定子 |
? |
直前の文字の繰り返し(0回または1回) | 量指定子 |
{n} |
n回繰り返す | 回数固定 |
{n,} |
n回以上繰り返す | 最小n回 |
{n,m} |
n回以上m回以下 | 範囲指定 |
{n,m}? |
n回以上m回以下(最短一致) | 非貪欲 |
() |
グループ化 | 後方参照で使用 |
| ` | ` | OR条件 |
\ |
エスケープ文字 | メタ文字を文字として扱う |
💡 ポイント
-
*や+は、条件に合う文字を できるだけ多く 取ろうとする
(この性質を 貪欲(greedy) と呼びます) - 例えば
a+は、aaaaの中ではaaaa全体にマッチする -
{n,m}?のように?を付けると、最短一致(非貪欲) となり、必要最小限の長さでマッチする
アンカーとは何か(文字ではなく「位置」)
アンカーは、
**文字ではなく「位置」を指定するための記号(位置指定子)**です。
メタ文字が「文字そのもの」を扱うのに対し、
アンカーは「どこにあるか」を指定します。
アンカー(位置指定)一覧
アンカーは「文字」ではなく、マッチする位置を指定する記号です。
※ ここで紹介するアンカーも、すべてを覚える必要はありません。
よく使うものから少しずつ慣れていけば十分です。
| アンカー | 意味 | 例(正規表現) | マッチする例 | マッチしない例 |
|---|---|---|---|---|
^ |
行頭 | ^abc |
abc123 |
xabc123 |
$ |
行末 | abc$ |
123abc |
123abcx |
\A |
テキスト全体の先頭(先頭固定) | \Aabc |
(ファイル先頭行が)abc...
|
2行目以降の abc...
|
\z |
テキスト全体の末尾(末尾固定) | abc\z |
(ファイル最終行末が)...abc
|
途中行の ...abc
|
\b |
単語境界(word boundary) | \bcat\b |
cat is... / a cat
|
concatenate |
\B |
単語境界ではない | \Bcat\B |
concatenate の中の cat
|
cat |
💡 補足(使い分けのコツ)
-
^/$は 行単位で効く(ログの行頭・行末チェックに強い) -
\A/\zは ファイル全体の先頭・末尾に固定したいときに使う
(「1行目だけ」「最終行だけ」を狙うイメージ) -
\bは 英数字の単語境界(日本語テキストでは期待通りにならないことがある)
まとめ
- 正規表現が難しく感じる原因は、文法よりも
アンカーやメタ文字の捉え方が曖昧なことにある - メタ文字は「特別な意味を持つ文字」
- アンカーは「文字」ではなく、マッチする位置を指定する記号
- すべてを暗記する必要はなく、
「どういう役割の記号があるか」を知っておくことが大切 - サクラエディタで実際に検索・ヒット位置を確認すると理解しやすい
おわりに
正規表現は、最初はとっつきにくく感じますが、
アンカーやメタ文字の役割が分かると、
「なぜマッチしないのか」「なぜ想定外の結果になるのか」
が見えるようになります。
本記事が、
サクラエディタで正規表現を使う際の
つまずきポイントを減らすきっかけになれば幸いです。