正規表現:ドット「.」の意味と使い方。

最終更新:2018-07-20 by Joe

正規表現において、最も使用頻度の高い特殊文字のひとつ「.(ドット)」について、その定義と使い方を詳しくまとめました。基本中の基本かもしれませんが、おさらいの意味もふくめてご覧ください。

正規表現における「.(ドット)」

なんでもいい一文字「.」

正規表現の「.(ドット、ピリオド)」は「任意の文字1文字」という意味です。基本的には、OSのような基盤システムの設定で用いる「ワイルドカード(*)」の用に「あらゆる文字」を表現する目的で使うことが多いです。

// ドットを用いた正規表現
/こんばん./

// マッチする文字列
こんばんは
こんばんみ
こんばんね

「.」を繰り返す表現

複数文字であれば、複数のドットを使えばマッチできます。

// 2つのドットを用いた正規表現
/..弁当/

// マッチする文字列
唐揚弁当
のり弁当
高級弁当

ただし、このような繰り返しが発生するパターンは、「量指定子」と呼ばれる「X回以上の繰り返し」を表すための特殊文字と一緒に使うのが便利です。

例えば下記は「直前の文字の0回以上の繰り返し」を表す量指定子「*」を利用した例です。

// ラーメンと複数の文字列
/ラーメン.*/

// マッチする文字列
ラーメンラーメンラララーメン
ラーメン大好き小池さん
ラーメン

文字としての「.(ドット)」をエスケープする

英文で、「.(ピリオド)」をマッチしたい場合があります。「.(ドット)」を通常の文字として扱うには、スラッシュをつかってエスケープします。

// ピリオドで終了する英文
/I am your father\./

// マッチする文字列
I am your father.

「.(ドット)」と改行の関係

「.」 はなんでもいい任意の一文字と説明しましたが、実際には「(改行以外の)任意の一文字」です。

// 今日も〇〇だね。
/今日も.*/

// 処理対象
今日も暑い、
東京の日差しが。

// マッチする文字列
今日も暑い、

この取扱は、正規表現エンジンによって異なるので、注意が必要です.

下記はPHPに仕様についての抜粋です。

ドット 
パターン中のドット(ピリオド、終止符)は、文字クラス外では、 対象文字列の任意の 1 文字にマッチします。非出力文字も含まれます。 ただし、(デフォルトでは)改行文字とはマッチしません。 PCRE_DOTALL オプションを設定すると、ドットは改行にもマッチするようになります。

抜粋:http://php.net/manual/ja/regexp.reference.dot.php

また、Vimでもドットは「改行をふくまない一文字」として動作します。

【参考】任意の文字を表す特殊文字の例

ドットは任意の一文字を表しますが、エスケープシーケンスを利用した表現に、種々の条件で一文字を表現するエスケープシーケンスがあります。

表現制御コードの意味
\aベル文字
\cXCtrl + 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文字(英小文字、数字、全角文字など含む)
\0NULL文字(0の後に数字を続けると、8進数を表す数字を表すエスケープシーケンスとなるので注意)

【参考】量指定子の種類

文字の繰り返しを表す量指定子も、必要に応じて使い分けることで、目的の表現を達成できます。

表現意味
.改行(\n、\r)を除くすべての文字
^行頭の位置(シングルラインモード:行頭、マルチライン:文章の頭)
$行末の位置
A|B「|」の左右の文字列のいずれか(A, Bのいずれか)
\X直後のメタ文字Xをエスケープする
[X]文字クラス。カッコ内に指定した文字のうち、いずれかの一文字
[X-Y]文字クラス内のハイフンは、文字の文字コード上の範囲を指定できる
[^X]否定の文字クラス。カッコ内で指定した文字以外のいずれかの一文字
(X)サブパターン。カッコ内のパターンにマッチした文字列を後方参照できる。ネスト可能。
{Num}量指定子。直前のパターンが何回連続するかをNumで指定。
※「量指定子」セクションを参照

Vim においては表現が大きく異なりますので注意して下さい。こちらの記事に言及しています。