正規表現について

正規表現の書き方

正規表現とは、対象の文字から指定した法則(パターン)と同じ文字を取り出す機能です。
パターンを使用して、大量の文章から指定した単語などを取り出すことができます。

パターンの書式

正規表現 意味
ABC ABCという文字列
[ABC] A、B、Cのいずれか1文字
[A-C] A〜Cまでのいずれか1文字
[^ABC] A、B、Cのいずれでもない任意の1文字
. 任意の1文字 (改行文字を除く)
A+ 1文字以上のA
A* 0文字以上のA
A? 0文字または1文字のA
^A Aで始まる文字列
A$ Aで終わる文字列
ABC|DEF|GHI ABCまたはDEFまたはGHI
A{2} 2個のA(AA)
A{2,} 2個以上のA(AA、AAA、AAAA、...)
A{2,3} 2個〜3個のA(AA、AAA)
[\b] バックスペース

先頭に「\」を付けると特別な意味を表します。

正規表現 意味
\b スペースなどの単語の区切り
\B \b以外の文字
\cA Ctrl-A
\d 任意の数値([0-9]と同じ)
\D 数値以外の文字([^0-9]と同じ)
\f フォームフィード文字
\n 改行文字
\r 復帰文字
\s 区切り文字(スペース、タブ、改行)
([ \f\n\r\t\v]と同じ)
\S \s以外の1文字
([^ \n\r\f\t] と同じ)
\t タブ文字
\v 垂直タブ文字
\w 英数文字([A-Za-z0-9_]と同じ)
\W \w以外の文字
\2 2番目の (...) にマッチした文字列
\o033 8進数で033にあたる文字
\x1b 16進数で1bにあたる文字
\その他 その他の文字自身

 

正規表現命令の使い方

プロデルでは、「正規表現」種類「取り出し」手順を使うことで、正規表現を使った文字列の取得ができます。

例1 HTMLからタグを取り出す

 

タグ一覧は、正規表現:「<b>abc</b><i>def</i>」 から「<(.*)>(.*)<\/\1>」を取り出したもの
タグ一覧を表示する

例2 住所から郵便番号だけを取り出す

 

ーー郵便番号のみを取り出します
内容は、「〒123-4567 東○都○代田区9-99-9 山○太郎」
(正規表現によって内容から「\d{3}-\d{4}」を取り出したもの)を表示する

 

サブマッチ「( )」の使い方

サブマッチは、正規表現で取り出した文字列からより細かく文字を取り出したいときに利用します。
サブマッチを利用するときは、「子要素ごとに取り出す」手順を使います。

パターンを「( )」で囲うことで、その部分だけをサブマッチとして配列に格納することができます。
サブマッチは、パターン内で利用することもでき、例えば、「\1」は、1番目の「( )」の内容と同じことを表わします。

例1 電話番号を細かく分解する

電話番号を分解して、市外局番(03)市内局番(1234)番号(5678)の順に配列に保存します。
結果は、「03,1234,5678」と表されます。

 

ーー電話番号を細かい分解する
電話番号配列は、正規表現によって「03-1234-5678」から「([[]0-9[]]*)-([[]0-9[]]*)-([[]0-9[]]*)」を子要素ごとに取り出したもの
電話番号配列を表示する

例2 HTMLからタグ名とその内容を取り出す

HTMLから対になるタグ(<head></head>や<body></body>)を探して、タグの名前とその内容を取り出します。
対になるタグを探すために、「<(.*)>〜<\/\1>」というパターンを指定しています。

 

内容は、「<head>ヘッダです。</head><body>本体です。</body>」
タグ一覧は、(正規表現によって内容から「<(.*)>(.*)<\/\1>」を子要素ごとに取り出したもの)
タグ一覧を表示する

なお、タグの間に改行が含まれる場合は、マッチしません。次の「最短一致」の例をご覧ください。

関連項目 子要素ごとに取り出す

最短一致

通常、正規表現では、パターンに合致する最も長い部分で取り出そうとします。
最も短い部分に合致するようにするためには、数の指定または*の直後に「?」を付けます。

次の例の場合、「にわ」が複数含まれますが、「.*」は以降の「にわ」にも合致しますので、すべて取り出され、最も長い部分が結果となります。

結果は、正規表現:「にわにはにわにわとりがいる」から「にわ.*」を取り出したもの
結果を表示する

次の例の場合は、先頭の「にわ」の後にある「にわ」がパターンにある「にわ」に合致しますので、最も短い部分で取り出され、結果は3つとなります。

結果は、正規表現:「にわにはにわにわとりがいる」から「にわ.*?」を取り出したもの
結果を表示する

 

例3 HTMLから<body>タグの内容を取り出す

 

タグは、パターン取り出し(「<html><body>こんにちは太郎です。[改行]よろしくどうぞ。</body><html>」、「<body>([\s\S]*?)<\/body>」、サブマッチ)
タグ(1)を表示

 


参考文献
Microsoft MSDNライブラリ-「正規表現の構文」
杜甫々氏 とほほのJavaScriptリファレンス正規表現(RegExp)