正規表現における「/」の意味と使い方についてまとめました。
目次
正規表現における「/(スラッシュ)」
まず大前提ですが、正規表現において「/(スラッシュ)」は、特別の意味を持たない、ただの文字です。
ただし、正規表現では「デリミタ」としてスラッシュを利用することが一般的で、その意味では、少しだけ特別な存在です。
デリミタとしてのスラッシュ
正規表現のスラッシュで、最もよく目にするのが「デリミタ(Delimiter)」と呼ばれる記号としての利用方法です。
「デリミタ」は、正規表現パターンの両端を同じ囲むことで、パターンの範囲を明示します。デリミタは、実際はどの文字でもOKなのですが、慣習的に「/」を使うことが多くなっています。
PHP:スラッシュをデリミタとして使う例
PHPでは、デリミタを文字列の両端に加えることで、正規表現で記述します。
<?php
// 正規表現を記述。デリミタに「/」を利用。
$pattern = '/カレー/';
// 検索対象
$subject = '今日はカレー曜日';
if ( preg_match( $pattern, $subject ) ) {
echo 'カレーが見つかりました!';
}
上記でも述べましたが、実際は何の文字でもいいので、もしパターン内にスラッシュが多く出現するのであれば、スラッシュをデリミタにつかわないほうがよいでしょう。
// デリミタと同じ文字は、エスケープが必要
$ptn = ’\/image\/index.php/;
// デリミタに#を使えば、スラッシュをエスケープしなくて良い
$ptn = "#var/www/html/index.php#";
エスケープについては、こちらに詳しくまとめましたので、ご一読下さい。
Javascript におけるスラッシュ
また、Javascript においては、正規表現オブジェクトを、リテラルに宣言することがができます。Javascript のリテラル宣言においては、デリミタにスラッシュを利用したときのみ、オブジェクトの宣言とみなされます。
Javascript の正規表現の宣言においては、スラッシュは特に特別な存在だといえるでしょう。
// 正規表現オブジェクトを宣言(リテラル宣言)
var pattern1 = /ラーメン/;
// 上記は、これの new による宣言と同義。
var pattern2 = new Regex('ラーメン');
// 検索対象
var subject = '今日はラーメン曜日';
console.log( pattern1.test(subject) ); // true
console.log( pattern2.test(subject) ); // true
スラッシュを使ったリテラル宣言は手軽ですが、正規表現のパターンでは、やはりスラッシュをエスケープする必要がありますので、パターン内にスラッシュが出現するケースでは、new による宣言のほうが扱いやすいでしょう。
このように、Javascript の正規表現は2つの方法があり、初学者は混乱しやすいかもしれません。こちらにも詳しくまとめました:
正規表現とスラッシュの参考情報
こちらの記事で、正規表現に関して、入門向けに広くまとめています。
PHPの正規表現関数です: