3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サクラエディタで理解する正規表現|アンカーとメタ文字

Posted at

はじめに

正規表現が分かりにくいと感じる原因は、
文法を知らないことよりも
アンカーやメタ文字の捉え方が曖昧なことにあると感じています。

この記事では、サクラエディタを使って
正規表現で特につまずきやすい
「アンカー」と「メタ文字」 に絞って解説します。


この記事はこんな人向け

  • 正規表現が苦手で、毎回ググりながら使っている
  • ^$. の挙動がよく分からない
  • サクラエディタでログ調査や文字列整形をしている
  • 正規表現を暗記ではなく、理解して使いたい

※ 本記事の正規表現は、主に サクラエディタ での利用を想定しています。


正規表現とは

正規表現とは、文字列のパターンを指定するための書き方です。
通常の検索では難しい、

  • 行の先頭だけ探したい
  • 数字だけを抽出したい
  • 特定の形式の文字列をチェックしたい

といった条件を指定できます。

正規表現では、メタ文字と呼ばれる特別な記号を使って
これらの条件を表現します。

なお、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英数字の単語境界(日本語テキストでは期待通りにならないことがある)

まとめ

  • 正規表現が難しく感じる原因は、文法よりも
    アンカーやメタ文字の捉え方が曖昧なことにある
  • メタ文字は「特別な意味を持つ文字」
  • アンカーは「文字」ではなく、マッチする位置を指定する記号
  • すべてを暗記する必要はなく、
    「どういう役割の記号があるか」を知っておくことが大切
  • サクラエディタで実際に検索・ヒット位置を確認すると理解しやすい

おわりに

正規表現は、最初はとっつきにくく感じますが、
アンカーやメタ文字の役割が分かると、
「なぜマッチしないのか」「なぜ想定外の結果になるのか」
が見えるようになります。

本記事が、
サクラエディタで正規表現を使う際の
つまずきポイントを減らすきっかけになれば幸いです。

3
0
0

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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?