正規表現での、全角、半角のスペースの表現方法についてです。
目次
正規表現における半角・全角スペースの表現
正規表現で、半角スペースと全角スペースは、エスケープが不要な文字のひとつです。ですので、通常通り普通の文字として記述すればOKです。
半角スペース
通常通り、半角スペースを文字として記述します。下記は、量指定子の「{n, m}」を利用して繰り返し回数の範囲を表現した例です。
// 2つ以上の半角スペースの連続をマッチ
$pattern = '/ {2,}/';
$subject = 'I need to get better in the regular expressions.';
if ( preg_match( $pattern, $subject ) ) {
echo '半角スペースの連続がありました。';
}
全角スペース
全角スペースも同様に文字として記述します。
下記は、量指定子「+」で「1つ以上の連続」をマッチした例です。
// 全角スペースの連続をマッチ
$pattern = '/ +/';
$subject = 'ソースコード内に全角スペースあったら怖い。。 ';
if ( preg_match( $pattern, $subject ) ) {
echo '全角スペースがありました。';
}
半角スペースか、全角スペースのいずれか
文字クラスと「(」「)」のカッコで囲んだ文字列で、カッコの中のいずれかに該当する文字を表すことができます。
// 半角・全角スペースのいずれか
( | )+
上記は2種類のスペースがパイプ(|)で区切られています。これにより半角、もしくは、全角のスペースのいずれであってもマッチさせることができます。直後に続く「+」で、スペースが1つか2つ以上連続する場合はすべてマッチしています。
また、文字クラスを使って同様の表現が可能です。
// 半角・全角スペースを含む文字クラス
[ ]+
量指定子についてはこちらもご一読下さい。
正規表現におけるタブの表現
正規表現でタブは「\t」を使って表現できます。
// タブ
\t
厳密には、普段利用するタブは「水平タブ」と呼ばれ、これに対して「垂直タブ」と呼ばれるもの(ファイルの下方向タブする)存在します。
普段あまりにも利用機会がないので、ここでは、あまり考えないようにしておきます。
また、こちらに特殊文字の一覧をまとめています。
空白文字(ホワイトスペース)の表現方法
正規表現における「空白文字」
日本語でスペースというと、半角・全角スペースの事を指しますが、文字をデータとして取り扱うとき「空白文字(ホワイトスペース)」とよばれる文字にはいくつかの種類があります。
- 半角スペース(全角スペースを除く)
- タブ
- 改行
- 改ページ
空白文字の表現
正規表現では、エスケープシーケンス「\s」を使って、これらの空白文字をまとめて1つの文字で表すこともできます。
// あらゆる空白文字の1文字以上の連続
\s+
空白以外の文字
「\s」とは対象に、大文字のSを利用したエスケープシーケンス「\S」は、「空白文字以外の文字列」を表現します。これを利用すると「空白を含むすべての文字」を表現することができます。
// あらゆる空白文字の1文字以上の連続
\S+
空白文字を含む「あらゆる文字」の表現
空白文字と空白以外の文字表現を組み合わせると、「あらゆる文字列」をこのように表現できます。
// 空白、改行、タブなどすべての文字の1文字以上の連続
[\s\S]+
通常の正規表現(マルチラインモード)では、特殊文字「.(ドット)」は空白文字以外の文字を表します。ですので、ドットと量指定子*を組み合わせた表現「.*」は、改行があると、処理がストップしてしまいますが、上記は改行を越えて(改行があっても行が途切れることなく)処理を行うことができます。
このような記述は、改行を越えた、ドキュメント全体でマッチングを行うときにしばしば必要になります。
参考情報
正規表現は利用している環境によって微妙に仕様が異なりますので、お使いの環境にご注意下さい。PHPはこちらによくまとまっています。
基本的な正規表現に関する情報は、こちら記事にまとめています。