正規表現において、最も使用頻度の高い特殊文字のひとつ「.(ドット)」について、その定義と使い方を詳しくまとめました。基本中の基本かもしれませんが、おさらいの意味もふくめてご覧ください。
目次
正規表現における「.(ドット)」
なんでもいい一文字「.」
正規表現の「.(ドット、ピリオド)」は「任意の文字1文字」という意味です。基本的には、OSのような基盤システムの設定で用いる「ワイルドカード(*)」の用に「あらゆる文字」を表現する目的で使うことが多いです。
// ドットを用いた正規表現
/こんばん./
// マッチする文字列
こんばんは
こんばんみ
こんばんね
「.」を繰り返す表現
複数文字であれば、複数のドットを使えばマッチできます。
// 2つのドットを用いた正規表現
/..弁当/
// マッチする文字列
唐揚弁当
のり弁当
高級弁当
ただし、このような繰り返しが発生するパターンは、「量指定子」と呼ばれる「X回以上の繰り返し」を表すための特殊文字と一緒に使うのが便利です。
例えば下記は「直前の文字の0回以上の繰り返し」を表す量指定子「*」を利用した例です。
// ラーメンと複数の文字列
/ラーメン.*/
// マッチする文字列
ラーメンラーメンラララーメン
ラーメン大好き小池さん
ラーメン
文字としての「.(ドット)」をエスケープする
英文で、「.(ピリオド)」をマッチしたい場合があります。「.(ドット)」を通常の文字として扱うには、スラッシュをつかってエスケープします。
// ピリオドで終了する英文
/I am your father\./
// マッチする文字列
I am your father.
「.(ドット)」と改行の関係
「.」 はなんでもいい任意の一文字と説明しましたが、実際には「(改行以外の)任意の一文字」です。
// 今日も〇〇だね。
/今日も.*/
// 処理対象
今日も暑い、
東京の日差しが。
// マッチする文字列
今日も暑い、
この取扱は、正規表現エンジンによって異なるので、注意が必要です.
下記はPHPに仕様についての抜粋です。
ドット
パターン中のドット(ピリオド、終止符)は、文字クラス外では、 対象文字列の任意の 1 文字にマッチします。非出力文字も含まれます。 ただし、(デフォルトでは)改行文字とはマッチしません。 PCRE_DOTALL オプションを設定すると、ドットは改行にもマッチするようになります。
また、Vimでもドットは「改行をふくまない一文字」として動作します。
【参考】任意の文字を表す特殊文字の例
ドットは任意の一文字を表しますが、エスケープシーケンスを利用した表現に、種々の条件で一文字を表現するエスケープシーケンスがあります。
表現 | 制御コードの意味 |
---|---|
\a | ベル文字 |
\cX | Ctrl + X(Xは任意の文字) |
\n | 改行コード(Line Feed) |
\r | 改行コード(Carriage Return) |
\f | 改ページ |
\R | すべての改行コード(「\n|\r|\n\r」と同義) |
\t | タブ |
\v | 垂直タブ |
\s | 空白文字(半角スペース、\t、\n、\r、\f)すべての文字。( |\t|\n|\r|\f)と同義 |
\S | 空白文字以外のすべての文字 |
\d | 数字。[0-9]と同義 |
\D | 数字以外の文字列。[^0-9]と同義 |
\w | すべてのアルファベットとアンダースコアのうち任意の一文字。[a-zA-Z0-9_]と同義 |
\W | すべてのアルファベットとアンダースコア以外の1文字[^a-zA-Z0-9_]と同義 |
\l | すべての半角英小文字のうち1文字 |
\L | すべての半角英小文字の以外の文字1文字(英大文字、数字、全角文字など含む) |
\u | すべての半角英大文字のうち1文字 |
\U | すべての半角英大文字以外の1文字(英小文字、数字、全角文字など含む) |
\0 | NULL文字(0の後に数字を続けると、8進数を表す数字を表すエスケープシーケンスとなるので注意) |
【参考】量指定子の種類
文字の繰り返しを表す量指定子も、必要に応じて使い分けることで、目的の表現を達成できます。
表現 | 意味 |
---|---|
. | 改行(\n、\r)を除くすべての文字 |
^ | 行頭の位置(シングルラインモード:行頭、マルチライン:文章の頭) |
$ | 行末の位置 |
A|B | 「|」の左右の文字列のいずれか(A, Bのいずれか) |
\X | 直後のメタ文字Xをエスケープする |
[X] | 文字クラス。カッコ内に指定した文字のうち、いずれかの一文字 |
[X-Y] | 文字クラス内のハイフンは、文字の文字コード上の範囲を指定できる |
[^X] | 否定の文字クラス。カッコ内で指定した文字以外のいずれかの一文字 |
(X) | サブパターン。カッコ内のパターンにマッチした文字列を後方参照できる。ネスト可能。 |
{Num} | 量指定子。直前のパターンが何回連続するかをNumで指定。 ※「量指定子」セクションを参照 |
Vim においては表現が大きく異なりますので注意して下さい。こちらの記事に言及しています。