D 1.0   D 2.0
About Japanese Translation

Last update Thu Feb 17 14:20:18 2011

std.regexp

Jump to: RegExp RegExpException email exec find match opApply opCall opEquals opIndex post pre regexp replace replaceOld rfind search split sub test url

このモジュールは非推奨です。 std.regex を使用して下さい。

正規表現 は文字列のパターンマッチを行う強力な方法です。 このライブラリで使用できる正規表現の言語は 基本的にはよく使われているものと同じですが、 非常に高度な機能の挙動は幾つか違う点もあるかもしれません。基準とした標準は ECMA standard の正規表現の項です。

std.regexp では、正しいUTF文字列が入力されたときの動作のみ保証されています。 文字列エンコードの正しさを調べるには、std.utf.validate() を使用してください。

以下の説明では、パターン pattern[] は常に 正規表現 を指します。 属性 attributes[] は、 正規表現の解釈を 制御する文字列です。 以下の文字の 1文字以上の列になります:

Attribute Characters
Attribute Action
g global; 全てのマッチを置換
i 大文字小文字を区別しない
m 改行文字で区切られた複数行文字列として扱います


format[] 文字列は以下の文字で構成されます:

Formatting Characters
Format Replaced With
$$ $
$& マッチした部分文字列
$` マッチより前の部分の文字列
$' マッチより後の部分の文字列
$n n 番目の括弧に対するマッチ。 n は 1..9 で、 数字が後に続いていない場合。
$nn nn 番目の括弧に対するマッチ。nn は二桁の数字 01-99 です。 nn番目のマッチが未定義だったり、 正規表現内の括弧による部分表現の個数よりも多かった場合、 空文字列に置き換わります。


これ以外の $ はそのまま残ります。

Source:
std/regexp.d

References:
Wikipedia License:
Boost License 1.0.

Authors:
Walter Bright

string email;
emailアドレスを取り出す正規表現です

References:
How to Find or Validate an Email Address
RFC 2822 Internet Message Format

string url;
urlを取り出す正規表現です

class RegExpException: object.Exception;
正規表現コンパイルエラー時に発生する例外です

string sub(string s, string pattern, string format, string attributes = null);
正規表現 pattern と属性 attributes に対する文字列 s 中のマッチを探します。 各々のマッチ部分を format から生成される文字列に置き換えます。

Params:
string s 検索対象の文字列
string pattern 正規表現パターン
string format 置換文字列フォーマット
string attributes 正規表現の属性

Returns:
置換結果の文字列

Example:
文字 'a' を 'ZZ' に置き換えます。
 s = "Strap a rocket engine on a chicken."
 sub(s, "a", "ZZ")        // 結果:  StrZZp a rocket engine on a chicken.
 sub(s, "a", "ZZ", "g")   // 結果:  StrZZp ZZ rocket engine on ZZ chicken.
置き換え後の文字列では $&, $$, $', $`, .. 9 記法を使ってマッチ結果を参照できます:
 sub(s, "[ar]", "[$&]", "g") // 結果: St[r][a]p [a] [r]ocket engine on [a] chi


string sub(string s, string pattern, string delegate(RegExp) dg, string attributes = null);
正規表現 pattern と属性 attributes に対する文字列 s 中のマッチを探し、 各々のマッチ部分を delegate dg に私、 dg からの返値に置き換えます。

Params:
string s 検索対象の文字列
string pattern 正規表現パターン
string delegate(RegExp) dg 置換操作を記述したdelegate
string attributes 正規表現の属性

Returns:
置換結果の文字列

Example:
文字 'a' と 'r' のみを大文字化:
 s = "Strap a rocket engine on a chicken.";
 sub(s, "[ar]",
    delegate char[] (RegExp m)
    {
         return toupper(m[0]);
    },
    "g");    // 結果: StRAp A Rocket engine on A chicken.


sizediff_t find(string s, RegExp pattern);
正規表現 pattern に対する文字列 s[] 中の最初のマッチを探します。

Params:
string s 検索対象の文字列
RegExp pattern 正規表現パターン

Returns:
マッチが見つかった s[] のインデックス。見つからなかった場合は -1

Example:
 auto s = "abcabcabab";
 find(s, RegExp("b"));    // マッチ。1を返す
 find(s, RegExp("f"));    // マッチしない。-1を返す


int find(string s, string pattern, string attributes = null);
Returns:
find(s, RegExp(pattern, attributes)) と同じ

WARNING:
この関数は、std.stringの同名の関数との不必要な曖昧性を避けるために、 非推奨となっています。std.regexp.find(s, p, a) の代わりに find(s, RegExp(p, a)) を使用してください。

sizediff_t rfind(string s, RegExp pattern);
正規表現 pattern に対する文字列 s[] 中の最後のマッチを探します。

Params:
string s 検索対象の文字列
RegExp pattern 正規表現パターン

Returns:
マッチが見つかった s[] のインデックス。見つからなかった場合は -1

Example:
 auto s = "abcabcabab";
 rfind(s, RegExp("b"));    // マッチ。9を返す
 rfind(s, RegExp("f"));    // マッチしない。-1を返す


sizediff_t rfind(string s, string pattern, string attributes = null);
Returns:
rfind(s, RegExp(pattern, attributes)) と同じ

WARNING:
この関数は、std.stringの同名の関数との不必要な曖昧性を避けるために、 非推奨となっています。 std.regexp.rfind(s, p, a) の代わりに、rfind(s, RegExp(p, a)) を使用してください。

string[] split(string s, RegExp pattern);
正規表現 pattern を区切りとして用いて、 文字列 s[] を文字列の配列へと分解します。

Params:
string s 検索対象の文字列
RegExp pattern 正規表現パターン

Returns:
s[] のスライスの配列

Example:
 foreach (s; split("abcabcabab", RegExp("C.", "i")))
 {
     writefln("s = '%s'", s);
 }
 // 出力:
 // s = 'ab'
 // s = 'b'
 // s = 'bab'


string[] split(string s, string pattern, string attributes = null);
Returns:
split(s, RegExp(pattern, attributes)) と同じ

WARNING:
この関数は、std.stringの同名の関数との不必要な曖昧性を避けるために、 非推奨となっています。 std.regexp.split(s, p, a) の代わりに split(s, RegExp(p, a)) を使用してください。

RegExp search(string s, string pattern, string attributes = null);
正規表現 pattern[] と属性 attributes[] に対する文字列 s 中の最初のマッチを探します。

Params:
string s 検索対象の文字列
string pattern 正規表現パターン
string attributes 正規表現の属性

Returns:
見つかったら対応する RegExp オブジェクト、見つからなければ null

Example:
 import std.stdio;
 import std.regexp;

 void main()
 {
     if (auto m = std.regexp.search("abcdef", "c"))
     {
         writefln("%s[%s]%s", m.pre, m[0], m.post);
     }
 }
 // 出力:
 // ab[c]def


class RegExp;
RegExp は正規表現を扱うクラスです。

RegExp クラスは、grepやawk,sed,あるいはテキストエディタのようなプログラムに 文字列マッチング機能を追加するためのコアとなる機能を提供します。

this(string pattern, string attributes = null);
新しい RegExp オブジェクトを作成します。pattern を 属性 attributes で、 高速実行のための内部形式へコンパイルします。

Params:
string pattern 正規表現文字列
string attributes 属性

Throws:
コンパイルエラーが発生すると RegExpException を投げます。

Example:
二つの変数を宣言してRegExpオブジェクトに割り当て:
 auto r = new RegExp("pattern");
 auto s = new RegExp(r"p[1-5]\s*");


static RegExp opCall(string pattern, string attributes = null);
新しい RegExp オブジェクトを作成します。

Params:
string pattern 正規表現文字列
string attributes 属性

Throws:
コンパイルエラーが発生すると RegExpException を投げます。

Example:
二つの変数を宣言してRegExpオブジェクトに割り当て:
 auto r = RegExp("pattern");
 auto s = RegExp(r"p[1-5]\s*");


RegExp search(string string);
int opApply(scope int delegate(ref RegExp) dg);
foreach ループの開始処理を行います

Returns:
stringを検索対象にセットアップした RegExp オブジェクトを返します。

Example:
 import std.stdio;
 import std.regexp;

 void main()
 {
     foreach(m; RegExp("ab").search("abcabcabab"))
     {
         writefln("%s[%s]%s", m.pre, m[0], m.post);
     }
 }
 // 出力:
 // [ab]cabcabab
 // abc[ab]cabab
 // abcabc[ab]ab
 // abcabcab[ab]


string opIndex(size_t n);
n 番目のマッチを取得します。

n==0 はマッチした部分文字列全体を意味し、n>0 は n番目の括弧で囲まれた部分表現を意味します。 n が括弧による部分表現の数よりも大きかった場合は、 null が返されます。

string match(size_t n);
opIndex(n) と同じ

WARNING:
オーバーロードされた match(string) との混同を避けるため非推奨となっています。代わりに regex[n] を使用してください。

string pre();
マッチした部分文字列の前の部分を表すスライスが返されます。

string post();
マッチした部分文字列の後ろの部分を表すスライスが返されます。

string[] split(string s);
正規表現を区切り文字列として使って、s[] を文字列の配列へ分割します。

Returns:
s[] のスライスの配列

size_t find(string string);
string[] 内から正規表現にマッチする位置を探します。

Returns:
マッチ箇所のindex。マッチしなかった場合は -1

string[] match(string s);
文字列 s[] からマッチを探します

Returns:
global属性がセットされていれば、exec(s) と同じ結果を返します。 global属性がないときは、全てのマッチの配列を返します。

string replace(string s, string format);
正規表現と s[] のマッチ箇所をさがし、 その箇所を対応する format[] による文字列へ置き換えます。 global属性がセットされている場合は全てのマッチを置き換え、そうでなければ最初のマッチを置き換えます。

Returns:
置換後の文字列

string[] exec(string string);
文字列 string[] からマッチを探します

Returns:
マッチを表す string[] へのスライスの配列

string[] exec();
最後に実行した exec(string) か exec() の検索を再実行し、 文字列中の次のマッチを探します。

Returns:
マッチを表す string[] のスライスの配列

bool test(string s);
文字列 s[] からマッチを探します

Returns:
マッチした場合 非0、しなかった場合 0

Example:
import std.stdio;
import std.regexp;
import std.string;

int grep(int delegate(char[]) pred, char[][] list)
{
  int count;
  foreach (s; list)
  {  if (pred(s))
       ++count;
  }
  return count;
}

void main()
{
  auto x = grep(&RegExp("[Ff]oo").test,
                std.string.split("mary had a foo lamb"));
  writefln(x);
}
この例では 1 と表示されます。

int test();
最後に実行した test(string) か test() の検索の続きを実行します

Returns:
マッチした場合 非0、しなかった場合 0

int test(string s, size_t startindex);
文字列 s[] を startindex から始めて正規表現とのマッチをテストします

Returns:
マッチした場合 非0、しなかった場合 0

alias opEquals;
文字列 sthis とマッチするか否かを返します。

string replace(string format);
マッチを test() で見つけたあと、 この関数を呼ぶと format 文字列を使って 新しい文字列を生成して返します。

string replaceOld(string format);
replace(char[] format) と同様ですが、旧形式の書式指定コマンドを使います:
Format Description
& マッチと置き換え
\n n番目の括弧に対するマッチに置き換わる。n は 1..9
\c 文字 c と置き換え