Step by step 正規表現入門 - 文字種別のメタ文字
今までの知識でも正規表現は使えますが、これらを覚えればより楽に書けるようになります。
文字種別の指定文字
文字種別を指定するメタ文字には次のようなものがあります。メタ文字 | 意味 | 対応する文字クラス |
---|---|---|
\w | 単語。英数字と _(アンダーバー) | [a-zA-Z0-9_] |
\d | 数字 | [0-9] |
\s | 空白文字(スペース、タブ、改行) | [ \t\r\n] |
- \W
- \D
- \S
[ \t] のように文字クラスの中にも \英数字 は書くことができました。 これと同様に \w なども文字クラス内に書くことができます。
[\w.-] → 英数字と . -
基本的に日本語の全角文字などは \w などには入らないのですが、 日本語対応の進んでいる Ruby などでは全角のアルファベットも含まれることもあります。
Emacs の場合
Emacs ではルールに違いがあります。文字 | 意味 |
---|---|
\w | 単語。英数字のみで _(アンダーバー) は含まない |
\d | × |
\sC | 構文テーブルの文字セットを指定する。 |
例えば、 C 言語では - は使えませんが、 Lisp では使えます。 こうなってくると Lisp の場合には単語用の文字セットとして - を加えたいところです。
これを実現するのが 構文テーブルです。 モードごとに単語、空白文字、閉じかっこなどに使う文字セットを指定することことができます。
これにより空白文字として全角空白を含んだり、 「 と 」 を対応する括弧と認識できたりもします。 また、 \w には日本語も入ってきます。
\s は後に対象となる構文テーブルの文字セットを表す 1 文字を付けて使用します。
単語、空白文字を表す文字はそれぞれ w と スペース です。 単語、空白文字を表す特殊文字は \sw と "\s " となります。
なお、 \w は [] の文字クラス内でも使えるのですが、 \s のメタ文字はクラス内では使えません。
Visual Studio の場合
Visual Studio の場合には \ ではなく : を使います。こちらは 1 文字だけでなく、文字列を指すものもあります。
文字 | 意味 | 文字セット表示 |
---|---|---|
:a | 英数字。_(アンダーバー) は含まない | [a-zA-Z0-9] |
:w | 英字文字列 | [a-zA-Z]+ |
:i | C/C++ 識別子 | [a-zA-Z_$][a-zA-Z0-9_$]* |
:d | 数字 | [0-9] |
:b | 空白文字(スペース、タブ) | [ \t] |
単語境界
行頭、行末の指定のように単語区切りを表す特殊文字もあります。 これは方言の多いところですが、便利なので紹介しておきます。例えば、 foo のような単語をコード中から検索したい場合単語の前が行頭だったり、空白や(のような文字だったりします。
barfoo = 8; // 英数字(これにはマッチさせたくない) foo = 2; // 行頭 int foo = 8; // 空白 if (foo == 0) // 記号こんなときに単語境界は \b を使うときちんと指定することができます。
ただし、 [\b] のように文字クラス内に書くとバックスペースの意味になります。
foo → このままだと barfoo にもマッチ \Wfoo → 前が英数字以外。これだと行頭にはマッチしない。 (\W|^)foo → これは OK。 \bfoo → \b を使うと簡単にかける
また、エディター系では単語境界の \b ではなく、 単語の先頭、末尾を表すメタ文字 < > を持っていることが多いです。
<foo> → \bfoo\b と似た意味
エディター | メタキャラクター |
---|---|
Emacs | \< \> |
Visual Studio, 秀丸エディター | < > |
次は ?
これで、覚えておくべき正規表現のルールの説明は完了です。最後に今まで出てきたルールをまとめておきましょう。