正規表現とは、さまざまな文字列を汎用的な形式で表すもので、パターンマッチ処理でのパターンを指定するための記述方法です。
もともとはUNIXで使われていましたが、その後、Perlで大幅に拡張され、Rubyを初めとする他のさまざまなソフトウェアでも使われるようになり、今日に至っています。
ここではさまざまな正規表現について、具体例を交えながら、解説していきます。
・・・の中の1文字を表す文字集合です。たとえば、[abc]はabcのうちのどれか1文字を表します。また、[0-9]は0から9までのどれか1文字、つまり、数字を表します。
・・・の中の1文字以外を表す文字集合です。たとえば、[^abc]はabc以外のどれか1文字を表します。また、[^0-9]は0から9まで以外のどれか1文字、つまり、数字以外を表します。
以下、具体例を交えながら、解説していきます。
/[12]/ 数字の「1」か「2」にマッチします。 /[1-6]/ 数字の1から6の1文字にマッチします。 /[0-9]/ 数字の1文字にマッチします。 /[0-9][0-9][0-9]/ 数字の3文字にマッチします。 /[a-z]/ 英小文字の1文字にマッチします。 /[a-z][a-z]/ 英小文字の2文字にマッチします。 /[A-Z]/ 英大文字の1文字にマッチします。 /[a-zA-Z0-9]/ 英字と数字との1文字にマッチします。 /[-6]/ ハイフンまたは6にマッチします。 /[^0-9]/ 数字以外の1文字にマッチします。 /[0x21-0x7E]/ 表示可能な1文字にマッチします。 /[0x20-0x7E]/ 印字可能な1文字にマッチします。
\b
単語境界にマッチします。
\b
単語境界以外にマッチします。
\w
英数字と_(アンダーバー)にマッチします。[a-zA-Z_]と指定したのと同じ内容です。
\W
英数字と_(アンダーバー)以外にマッチします。[^a-zA-Z_]と指定したのと同じ内容です。
\s
空白文字にマッチします。具体的には、スペースや改行、タブなどを表します。[ \t\n\f\r]と指定したのと同じ内容です。
\S
空白文字以外にマッチします。具体的には、スペースや改行、タブなど以外を表します。[^ \t\n\f\r]と指定したのと同じ内容です。
\d
0〜9にマッチします。[0-9]と同じです。(Unicodeとして処理した場合、全角文字の数字にもマッチします。この点が[0-9]と異なる点です)
\D
0〜9以外にマッチします。[^0-9]と同じ
/national\b/ nationalやintenationalにマッチしますが、 internationalizationにマッチしない。 /\bJapan\B/ Japaneseにマッチしますが、Japanにはマッチしません。 /\bJapan\b/ Japanにマッチしますが、Japaneseにはマッチしません。 /\w{3}/ 英数字3文字にマッチします (実際には3文字以上あれば、3文字あることになるので、マッチしてしまいます)。 /^\w{3}$/ 英数字3文字だけの場合にマッチします。上記の文字クラスの中でも使えます。 /[\w@#&]/ 英数字と_(アンダーバー)、@、#、&のいずれか1文字にマッチします。
その他、制御文字として以下のものがあります。
\n
改行コード(0x0A)にマッチします。
\t
タブコード(0x09)にマッチします。
\a
ベル(0x07)にマッチします。
\b
バックスペース(0x08)にマッチします。
\e
エスケープ(0x1B)にマッチします。
\f
フォームフィード(0x0C)にマッチします。
\r
復帰(キャリッジ・リターン)(0x0D)にマッチします。