std.regexp
このモジュールは非推奨です。 std.regex を使用して下さい。 正規表現 は文字列のパターンマッチを行う強力な方法です。 このライブラリで使用できる正規表現の言語は 基本的にはよく使われているものと同じですが、 非常に高度な機能の挙動は幾つか違う点もあるかもしれません。基準とした標準は ECMA standard の正規表現の項です。std.regexp では、正しいUTF文字列が入力されたときの動作のみ保証されています。 文字列エンコードの正しさを調べるには、std.utf.validate() を使用してください。
以下の説明では、パターン pattern[] は常に 正規表現 を指します。 属性 attributes[] は、 正規表現の解釈を 制御する文字列です。 以下の文字の 1文字以上の列になります:
Attribute | Action |
---|---|
g | global; 全てのマッチを置換 |
i | 大文字小文字を区別しない |
m | 改行文字で区切られた複数行文字列として扱います |
format[] 文字列は以下の文字で構成されます:
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
- emailアドレスを取り出す正規表現です
References:
How to Find or Validate an Email Address
RFC 2822 Internet Message Format
- urlを取り出す正規表現です
- 正規表現コンパイルエラー時に発生する例外です
- 正規表現 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
- 正規表現 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.
- 正規表現 pattern に対する文字列 s[] 中の最初のマッチを探します。
Params:
string s 検索対象の文字列 RegExp pattern 正規表現パターン
Returns:
マッチが見つかった s[] のインデックス。見つからなかった場合は -1
Example:
auto s = "abcabcabab"; find(s, RegExp("b")); // マッチ。1を返す find(s, RegExp("f")); // マッチしない。-1を返す
- Returns:
find(s, RegExp(pattern, attributes)) と同じ
WARNING:
この関数は、std.stringの同名の関数との不必要な曖昧性を避けるために、 非推奨となっています。std.regexp.find(s, p, a) の代わりに find(s, RegExp(p, a)) を使用してください。
- 正規表現 pattern に対する文字列 s[] 中の最後のマッチを探します。
Params:
string s 検索対象の文字列 RegExp pattern 正規表現パターン
Returns:
マッチが見つかった s[] のインデックス。見つからなかった場合は -1
Example:
auto s = "abcabcabab"; rfind(s, RegExp("b")); // マッチ。9を返す rfind(s, RegExp("f")); // マッチしない。-1を返す
- Returns:
rfind(s, RegExp(pattern, attributes)) と同じ
WARNING:
この関数は、std.stringの同名の関数との不必要な曖昧性を避けるために、 非推奨となっています。 std.regexp.rfind(s, p, a) の代わりに、rfind(s, RegExp(p, a)) を使用してください。
- 正規表現 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'
- Returns:
split(s, RegExp(pattern, attributes)) と同じ
WARNING:
この関数は、std.stringの同名の関数との不必要な曖昧性を避けるために、 非推奨となっています。 std.regexp.split(s, p, a) の代わりに split(s, RegExp(p, a)) を使用してください。
- 正規表現 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
- 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*");
- 新しい RegExp オブジェクトを作成します。
Params:
string pattern 正規表現文字列 string attributes 属性
Throws:
コンパイルエラーが発生すると RegExpException を投げます。
Example:
二つの変数を宣言してRegExpオブジェクトに割り当て:auto r = RegExp("pattern"); auto s = RegExp(r"p[1-5]\s*");
- 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]
- n 番目のマッチを取得します。
n==0 はマッチした部分文字列全体を意味し、n>0 は n番目の括弧で囲まれた部分表現を意味します。 n が括弧による部分表現の数よりも大きかった場合は、 null が返されます。
- opIndex(n) と同じ
WARNING:
オーバーロードされた match(string) との混同を避けるため非推奨となっています。代わりに regex[n] を使用してください。
- マッチした部分文字列の前の部分を表すスライスが返されます。
- マッチした部分文字列の後ろの部分を表すスライスが返されます。
- 正規表現を区切り文字列として使って、s[]
を文字列の配列へ分割します。
Returns:
s[] のスライスの配列
- string[] 内から正規表現にマッチする位置を探します。
Returns:
マッチ箇所のindex。マッチしなかった場合は -1
- 文字列 s[] からマッチを探します
Returns:
global属性がセットされていれば、exec(s) と同じ結果を返します。 global属性がないときは、全てのマッチの配列を返します。
- 正規表現と s[]
のマッチ箇所をさがし、
その箇所を対応する format[] による文字列へ置き換えます。
global属性がセットされている場合は全てのマッチを置き換え、そうでなければ最初のマッチを置き換えます。
Returns:
置換後の文字列
- 文字列 string[] からマッチを探します
Returns:
マッチを表す string[] へのスライスの配列
- 最後に実行した exec(string) か exec() の検索を再実行し、
文字列中の次のマッチを探します。
Returns:
マッチを表す string[] のスライスの配列
- 文字列 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 と表示されます。
- 最後に実行した test(string) か test() の検索の続きを実行します
Returns:
マッチした場合 非0、しなかった場合 0
- 文字列 s[] を startindex から始めて正規表現とのマッチをテストします
Returns:
マッチした場合 非0、しなかった場合 0
- 文字列 s が this とマッチするか否かを返します。
- マッチを test() で見つけたあと、
この関数を呼ぶと format 文字列を使って
新しい文字列を生成して返します。
- replace(char[] format) と同様ですが、旧形式の書式指定コマンドを使います:
Format Description & マッチと置き換え \n n番目の括弧に対するマッチに置き換わる。n は 1..9 \c 文字 c と置き換え