英語版
このページの英語版を見る

std.regex

正規表現 は、文字列のパターンマッチングによく使われる 正規表現とは、文字列のパターンを表すキャッチーな言葉である。 特有の言語である。通常、正規表現によって解決される典型的な問題には、ユーザー入力の妥当性確認や、文字列のパターン・マッチなどがある。 によって解決される典型的な問題には、ユーザー入力の検証や、テキスト処理ユーティリティにおけるユビキタスな検索と置換がある。 などがある。
カテゴリー 関数" 区分
マッチング bmatch match matchAll matchFirst
ビルディング ctRegex escaper regex
交換する replace replaceAll replaceAllInto replaceFirst replaceFirstInto
分割 split splitter
オブジェクト Captures Regex RegexException RegexMatch Splitter StaticRegex

あらすじ

実行時に正規表現を作成する:
彼らは1970年1月24日に出会った。 99年7月8日は2022年7月8日ほどホットではなかった。
import std.regex;
import std.stdio;
// ユーザ入力から見つかったdd/mm/yy(yy)の可能な日付をすべて出力する。
auto r = regex(r"\b[0-9][0-9]?/[0-9][0-9]?/[0-9][0-9](?:[0-9][0-9])?\b");
foreach (line; stdin.byLine)
{
  // matchAll()は、その後に続く全てのマッチを
  // 得るために反復可能な範囲を返す。
  foreach (c; matchAll(line, r))
      writeln(c.hit);
}
コンパイル時に、高速なネイティブ・コードを含む静的正規表現を作成する:
import std.regex;
auto ctr = ctRegex!(`^.*/([^/]+)/?$`);

// 通常の正規表現と同じように動作する:
auto c2 = matchFirst("foo/bar", ctr);   // 最初に一致するものがあれば、
assert(!c2.empty);   // ここで見つかる内容を確認する前に、必ず一致するかどうかを確認すること!
assert(c2[1] == "bar");   // キャプチャはサブマッチの範囲である: 0 = 完全一致。
マルチパターン正規表現:
import std.regex;
auto multi = regex([`\d+,\d+`, `([a-z]+):(\d+)`]);
auto m = "abc:43 12,34".matchAll(multi);
assert(m.front.whichPattern == 2);
assert(m.front[1] == "abc");
assert(m.front[2] == "43");
m.popFront();
assert(m.front.whichPattern == 1);
assert(m.front[0] == "12,34");
CapturesおよびopCast!bool :
import std.regex;
// `matchAll/matchFirst`の結果は、`if/assert/while`で直接テストできる、
// 例えば、文字列が文字のみで構成されているかどうかを調べることができる:
assert(matchFirst("LettersOnly", `^\p{L}+$`));

// また、IfConditionの中で変数を定義する機能を利用することもできる:
if (const captures = matchFirst("At l34st one digit, but maybe more...", `((\d)(\d*))`))
{
    assert(captures[2] == "3");
    assert(captures[3] == "4");
    assert(captures[1] == "34");
}
See Also:
IfCondition.

構文と一般情報

一般的な使い方のガイドラインは、正規表現の複雑さを単純さの側に置くことである、 なぜなら、その機能は純粋に文字レベルの操作にしかないからだ。 そのため、より高度な不変量を含むタスクには不向きである。 たとえば、[a,b]区間で区切られた整数のマッチングなどだ。 この種のチェックは、追加の後処理で対処するのがよいだろう。
基本的な構文は、正規表現の経験者を驚かせるものではない。 については std.regexを参照されたい。 モジュールAPIの"ショートツアー とその能力の簡単なツアーを見ることができる。
初心者を助けるために、正規表現に関する他のウェブ・リソースがある、 また、チュートリアル を簡単に見つけることができる。
このライブラリは、非常に一般的なECMAScriptの構文である を使用している:
  • Python 構文による名前付き部分式。
  • スクリプト、ブロック、一般的なバイナリー・プロパティ(アルファベット、ホワイト・スペース、ヘックス・デジットなど)のようなユニコード・プロパティ。
  • 任意の長さと複雑さのルックビハインド(ルックビハインドのルックアヘッドやその逆も含む)。

パターン構文

std.regexはコードポイントレベルで動作する、 この表で'character'は単一のUnicodeコードポイントを表す。
パターン要素 セマンティクス
アトム 単一の文字にマッチする
を除く任意の文字[{|*+?()^$]。 文字そのものにマッチする。
. 一行モードでは任意の文字にマッチする。 それ以外の場合は'˶n'と'˶r'以外の文字にマッチする。
[クラス]. この文字クラスに属する この文字クラスに属する単一の文字にマッチする。
[class] この文字クラスに属する単一の文字にマッチする。 この文字クラスに属さない この文字クラスに属さない1文字にマッチする。
\C 文字Cに対応する制御文字にマッチする。
\XXX 16進数でXXの値を持つ文字にマッチする。
\uXXXX 16進数にXXXXを持つ文字にマッチする。
\U00YYYYYY 16進数がYYYYYYの文字にマッチする。
\f フォームフィード文字にマッチする。
\n 改行文字に合致する。
\r 改行文字にマッチする。
\t タブ文字にマッチする
\v 垂直タブ文字にマッチする
\d 任意のUnicode数字にマッチする
\D Unicodeの数字以外の任意の文字にマッチする。
\w 任意の単語文字(注釈: 数字を含む)にマッチする。
\W 単語以外の文字にマッチする。
\s 空白文字にマッチする。
\S として認識される文字以外の任意の文字にマッチする
\\ として認識される文字以外の任意の文字にマッチする。
\cは[|*+?]のいずれかである。 文字cそのものにマッチする。
\p{PropertyName}に属する文字にマッチする。 UnicodeのPropertyNameセットに属する Unicode PropertyName セットに属する文字にマッチする。 一文字の省略形は {,} を囲まずに使用できる。
\P{PropertyName}。 UnicodeのPropertyNameセットに属さない文字にマッチする。 Unicode PropertyName セットに属さない文字にマッチする。 一文字の省略形は {,} を囲まずに使用できる。
\p{InBasicLatin}。 基本ラテン文字 Unicode ブロックの一部である 一部である任意の文字にマッチする。
\P{InBasicLatin}。 BasicLatin Unicode ブロックに含まれる文字以外の任意の文字にマッチする。 BasicLatin Unicodeブロックに含まれる文字以外の任意の文字にマッチする。
\P{Cyrillic} キリル文字にマッチする。 キリル文字の一部である任意の文字にマッチする。 キリル文字の一部である任意の文字にマッチする。
\キリル文字 キリル文字以外の任意の文字にマッチする。 キリル文字以外の文字にマッチする。
Quantifiers Specify repetition of other elements
* 前の文字/部分式に 0 回以上マッチする。 貪欲バージョン - できるだけ多くの回数を試す。
*? 前の文字/部分式に0回以上マッチする。 怠惰なバージョン - できるだけ早い段階で停止する。
+ 前の文字/部分式に1回以上マッチする。 貪欲バージョン - できるだけ多くの回数を試す。
+? 前の文字/部分式に1回以上マッチする。 のんびりバージョン - できるだけ早い段階で停止する。
? 前の文字/部分式に0回または1回マッチする。 貪欲バージョン - できるだけ多くの回数を試す。
?? 前の文字/部分式に0回または1回マッチする。 Lazy version - できるだけ早い段階で停止する。
{n} 前の文字/部分式に正確にn回マッチする。
{n,} 前の文字/部分式に n 回以上マッチする。 貪欲バージョン - 可能な限り何回も試す。
{n,}? 前の文字/部分式にn回以上マッチする。 Lazy version - できるだけ早い段階で停止する。
{n,m}とする。 前の文字/部分式にn~m回マッチする。 Greedy version - 可能な限り回数を試すが、m回を超えない。
{n,m}? 前の文字/部分式にn回からm回マッチする。 遅延バージョン - 可能な限り早期に停止するが、n回以下にはならない。
Other Subexpressions & alternations
(正規表現) 正規表現regexの部分式にマッチする、 マッチした部分を後で検索できるように保存する。
(?#comment) マッチ時に無視されるインラインコメント。
(?:regex) 部分正規表現にマッチする、 マッチした部分を保存しない。マッチングを高速化するのに便利である。
A|B 部分式 A にマッチするか、マッチしない場合は B にマッチする。
(?P<name>regex) 名前付き部分式 という名前の正規表現にマッチする。 マッチしたテキストの一部を参照する、 は、直接の数字に加えて、エイリアスのように働く。
Assertions Match position rather than character
^ 入力または行の先頭にマッチする(複数行モードの場合)。
$ 入力または行の末尾にマッチする(複数行モードの場合)。
\b 単語境界にマッチする。
\B 単語境界でないときにマッチする。
(?=regex) ゼロ幅ルックヘッド・アサーション。 現在の位置から始めて regexが現在の位置から始まる部分式にマッチする可能性のある位置にマッチする。
(?!regex) ゼロ幅の負のルックヘッドアサーション。 部分式 regex が現在の位置から始まる部分式にマッチしなかった場合にマッチする。
(?<=regex) ゼロ幅のルックバインドアサーション。正規表現 で終わる部分式 regex にマッチする。 で終わる部分式にマッチする (マッチは後方に進む)。
(?<!regex) ゼロ幅の負の lookbehind アサーション。 部分式 regex が現在の位置で終わってマッチできなかった箇所にマッチする。 を現在の位置で終了する部分式にマッチする(マッチングは後方に進む)。

キャラクター・クラス

Pattern element Semantics
任意の原子 文字クラス外と同じ意味を持つ、 ただし、]は[と書かなければならない。]
a-z a, b, c, ..., zを含む。
[a||b]、[a--b]、[a~~b]、[a&&b]。 a,bは任意のクラスであり、共用体、集合差、対称集合差を意味する、 対称集合差、交差をそれぞれ意味する。 文字クラス要素の任意のシーケンスは暗黙的に共用体を形成する

正規表現フラグ

Flag Semantics
g グローバル正規表現、入力全体で繰り返す。
i 大文字小文字を区別しない。
m 複数行モード、入力の行頭と行末だけでなく、行頭と行末の ^, $ にもマッチする。 および入力の開始と終了にマッチする。
s 単一行モード、.を ' \n' と ' \r' にもマッチさせる。
x 自由形式の構文で、パターン内の空白を無視する、 複雑な正規表現をフォーマットするのに役立つ。

ユニコード対応

本ライブラリは、UTS 18に準拠したレベル1の完全サポート*を提供する。 UTS 18.具体的には
  • 1.1 ㊟uxxxx、㊟U00YYYYY、㊟xZZ のいずれかによる 16 進表記。
  • 1.2 Unicode プロパティ。
  • 1.3 集合操作を持つ文字クラス。
  • 1.4 単語境界は「単語」文字の完全なセットを使用する。
  • 1.5 単純な大文字と小文字の折りたたみを使用して 大文字小文字を区別しない。
  • 1.6 改行を \を尊重する。
  • 1.7 コードポイントレベルで操作する。
*1.1.1を除き、現時点では、入力の正規化はユーザーによって強制されることが期待される。 はユーザーによって強制されることが期待される。

フォーマット文字列を置き換える

置換を行うこのモジュールの一連の関数は、そのプロセスを導く簡単な書式に依存している。 を行うこのモジュールの一連の関数は、処理を導くための単純な書式に依存している。特に以下の表は のformat 引数に適用される。 replaceFirstreplaceAll.
フォーマット文字列は、以下の記法を用いてマッチの一部を参照することができる。
Format specifier Replaced by
ドル マッチ全体。
dollar;` マッチに先行する入力の一部。
$' マッチに続く入力の一部。
$$ '$' 文字。
\c (cは任意の文字である cは任意の文字である。
\\ 文字。
ドル;1 ... ドル;99 それぞれサブマッチ番号1~99。

スライシングとゼロ・メモリ割り当てのオリエンテーション

このライブラリーのパターンマッチング関数が返すマッチはすべて は元の入力のスライスである。注目すべき例外はreplace 入力から新しい文字列を生成する関数群である。
置換を生成することが最終目的である場合 replaceFirstIntoであり replaceAllInto便利である 置き換えのためのアロケーションを回避する関数として。
Authors:
Dmitry Olshansky,
API and utility constructs are modeled after the original std.regex by Walter Bright and Andrei Alexandrescu.
template Regex(Char)
Regexオブジェクトは正規表現パターンをコンパイルした形で保持する。
このオブジェクトのインスタンスは、regex を呼び出すことで生成される。 これは、頻繁に使われる正規表現のキャッシュと保存を目的としたものである。 これは、頻繁に使用される正規表現のキャッシュと保存を目的とした形式である。

例: このオブジェクトにコンパイルされたパターンが含まれていないかテストする。

Regex!char r;
assert(r.empty);
r = regex(""); // 注釈: ""は有効な正規表現パターンである。
assert(!r.empty);
正規表現内のすべての名前付きキャプチャの範囲を取得する。
import std.range;
import std.algorithm;

auto re = regex(`(?P<name>\w+) = (?P<var>\d+)`);
auto nc = re.namedCaptures;
static assert(isRandomAccessRange!(typeof(nc)));
assert(!nc.empty);
assert(nc.length == 2);
assert(nc.equal(["name", "var"]));
assert(nc[0] == "name");
assert(nc[1..$].equal(["var"]));

alias StaticRegex = Regex(Char);
A StaticRegexRegex オブジェクトである。 を含むオブジェクトである。
もはや使用されていないが、後方互換性のためにRegexのエイリアスとして保持されている。
@trusted auto regex(S : C[], C)(const S[] patterns, const(char)[] flags = "")
if (isSomeString!S);

@trusted auto regex(S)(S pattern, const(char)[] flags = "")
if (isSomeString!S);
後で実行するために正規表現パターンをコンパイルする。
Returns:
Regex オブジェクトは と同じ文字幅を持つ入力に対して動作する pattern.
Parameters:
S pattern マッチさせる1つの正規表現。
S[] patterns 正規表現文字列の配列。 結果のRegex オブジェクトは、どの正規表現にもマッチする; どの正規表現にマッチするかを知るには whichPatternを使う。
const(char)[] flags 属性(g, i, m, s, xが使える)
Throws:
RegexException コンパイル時にエラーがあった場合
Examples:
void test(S)()
{
    // マルチパターン正規表現の例
    S[] arr = [`([a-z]+):(\d+)`, `(\d+),\d+`];
    auto multi = regex(arr); // マルチ正規表現
    S str = "abc:43 12,34";
    auto m = str.matchAll(multi);
    writeln(m.front.whichPattern); // 1
    writeln(m.front[1]); // "abc"
    writeln(m.front[2]); // "43"
    m.popFront();
    writeln(m.front.whichPattern); // 2
    writeln(m.front[1]); // "12"
}

import std.meta : AliasSeq;
static foreach (C; AliasSeq!(string, wstring, dstring))
    // パターンの定数配列でテストする - https://issues.dlang.org/show_bug.cgi?id=20301を参照のこと
    static foreach (S; AliasSeq!(C, const C, immutable C))
        test!S();
enum auto ctRegex(alias pattern, string flags = "");
CTFEを使って正規表現をコンパイルする。 を使用して正規表現をコンパイルし、それにマッチするように最適化されたネイティブ・マシン・コードを生成する。
Returns:
より高速なマッチングのためのStaticRegexオブジェクト。
Parameters:
pattern 正規表現
flags 属性(g、i、m、s、xを受け付ける)
struct Captures(R) if (isSomeString!R);
Capturesオブジェクトは、 の呼び出しや、 の範囲に対する反復処理中にキャプチャされたサブマッチを含んでいる。 match を呼び出したり、RegexMatch の範囲を反復したりする際に捕捉されたサブマッチが含まれる。
範囲の最初の要素はマッチ全体である。
Examples:
import std.range.primitives : popFrontN;

auto c = matchFirst("@abc#", regex(`(\w)(\w)(\w)`));
assert(c.pre == "@"); // マッチに先立つ入力の一部
assert(c.post == "#"); // マッチ直後
assert(c.hit == c[0] && c.hit == "abc"); // マッチ全体
writeln(c[2]); // "b"
writeln(c.front); // "abc"
c.popFront();
writeln(c.front); // "a"
writeln(c.back); // "c"
c.popBack();
writeln(c.back); // "b"
popFrontN(c, 2);
assert(c.empty);

assert(!matchFirst("nothing", "something"));

// マッチしなかったキャプチャはnullになる。
c = matchFirst("ac", regex(`a(b)?c`));
assert(c);
assert(!c[1]);
@property R pre();
試合前のインプットのスライス
@property R post();
マッチ直後の入力のスライス。
@property R hit();
入力のマッチした部分のスライス。
@property R front();

@property R back();

void popFront();

void popBack();

const @property bool empty();

inout inout(R) opIndex()(size_t i);
範囲インターフェイス。
const nothrow @safe bool opCast(T : bool)();
boolへの明示的キャスト。 if文やassert文の!(x.empty)の省略形として便利。
import std.regex;

assert(!matchFirst("nothing", "something"));
const nothrow @property @safe int whichPattern();
パターンにマッチした数を数える。 マッチしない場合は0を返す。
Examples:
import std.regex;
writeln(matchFirst("abc", "[0-9]+", "[a-z]+").whichPattern); // 2
R opIndex(String)(String i)
if (isSomeString!String);
名前付きサブマッチを検索する。
import std.regex;
import std.range;

auto c = matchFirst("a = 42;", regex(`(?P<var>\w+)\s*=\s*(?P<value>\d+);`));
assert(c["var"] == "a");
assert(c["value"] == "42");
popFrontN(c, 2);
// 名前付きグループは範囲プリミティブの影響を受けない
assert(c["var"] =="a");
assert(c.front == "42");
const @property size_t length();
このオブジェクトのマッチ数。
@property ref auto captures();
オリジナルのstd.regexとの互換性のためのフック。
struct RegexMatch(R) if (isSomeString!R);
match ファミリーの関数が返す正規表現エンジンの状態。
事実上、Captures!Rの前方範囲である。 の前方範囲である。
@property R pre();

@property R post();

@property R hit();
front.pre、front.post、front.hitの短縮形である。
inout @property inout(Captures!R) front();

void popFront();

auto save();
範囲インターフェイスを介してグローバル正規表現の後続のマッチを処理する機能:
import std.regex;
auto m = matchAll("Hello, world!", regex(`\w+`));
assert(m.front.hit == "Hello");
m.popFront();
assert(m.front.hit == "world");
m.popFront();
assert(m.empty);
const @property bool empty();
このマッチオブジェクトが空かどうかをテストする。
T opCast(T : bool)();
(x.empty)と同じで、条件文での利便性のために提供される。
inout @property inout(Captures!R) captures();
.frontと同じで、元のstd.regexとの互換性のために提供される。
auto match(R, RegEx)(R input, RegEx re)
if (isSomeString!R && isRegexFor!(RegEx, R));

auto match(R, String)(R input, String re)
if (isSomeString!R && isSomeString!String);
マッチを開始する input正規表現パターン re, にマッチングを開始する。
この関数の使用は推奨されないmatchAllまたは matchFirst.
操作の種類を "g"フラグに委ねる を "g"フラグに委譲することは、正確なマッチング方式を選択する機能とともに、まもなく廃止される予定である。 正確なマッチング方式を選択する機能とともに廃止される。どの 使用するマッチングスキームの選択はパターンの種類に大きく依存する。 ケースバイケースで自動的に行われる。
Returns:
最初のマッチ後のエンジン状態を保持するRegexMatch オブジェクト。
auto matchFirst(R, RegEx)(R input, RegEx re)
if (isSomeString!R && isRegexFor!(RegEx, R));

auto matchFirst(R, String)(R input, String re)
if (isSomeString!R && isSomeString!String);

auto matchFirst(R, String)(R input, String[] re...)
if (isSomeString!R && isSomeString!String);
の最初の(左端の)スライスを見つける。 inputその パターンにマッチする re.この"関数"は、パターンのプロパティに応じて最適な正規表現エンジンを選ぶ。 正規表現エンジンを選ぶ。
reパラメータには3つの型がある:
  • プレーンな文字列。この場合、マッチング前にバイトコードにコンパイルされる。
  • Regex!char(wchar/dchar):コンパイルされたバイトコード形式のパターンを含む。 バイトコードにコンパイルされる。
  • staticRegex!char(wchar/dchar)で、コンパイルされたネイティブ・マシンコード形式のパターンを含む。 コンパイルされたネイティブ・マシン・コードの形でパターンを含む。
Returns:
Capturesマッチの範囲とすべてのサブマッチを含む。 を含む。 Capturesオブジェクトを含む。
auto matchAll(R, RegEx)(R input, RegEx re)
if (isSomeString!R && isRegexFor!(RegEx, R));

auto matchAll(R, String)(R input, String re)
if (isSomeString!R && isSomeString!String);

auto matchAll(R, String)(R input, String[] re...)
if (isSomeString!R && isSomeString!String);
パターンに重複しないすべてのマッチの検索を開始する。 re に重ならないすべてのマッチを検索する。 input.その結果は、入力の左から右にマッチしたときに生成される が生成される。
この"関数"は、パターンの性質に応じて、最も適切な正規表現エンジンを選ぶ。 を選ぶ。
reパラメータには3つの型がある:
  • プレーン文字列(この場合、マッチング前にバイトコードにコンパイルされる)。
  • Regex!char(wchar/dchar):コンパイルされたバイトコード形式のパターンを含む。 バイトコードにコンパイルされる。
  • staticRegex!char(wchar/dchar)で、コンパイルされたネイティブ・マシンコード形式のパターンを含む。 コンパイルされたネイティブ・マシン・コードの形でパターンを含む。
Returns:
RegexMatchマッチャーの状態を表す オブジェクトを返す。
auto bmatch(R, RegEx)(R input, RegEx re)
if (isSomeString!R && isRegexFor!(RegEx, R));

auto bmatch(R, String)(R input, String re)
if (isSomeString!R && isSomeString!String);
正規表現パターンへの input正規表現パターン re, のマッチングを開始する。
この関数の使用は推奨されないmatchAllまたは matchFirst.
操作の種類を "g"フラグに委ねる を "g"フラグに委譲することは、正確なマッチング方式を選択する機能とともに、まもなく廃止される予定である。 正確なマッチング方式を選択する機能とともに廃止される。どの 使用するマッチングスキームの選択はパターンの種類に大きく依存する。 ケースバイケースで自動的に行われる。
Returns:
RegexMatch オブジェクトはエンジン オブジェクトを保持する。
R replaceFirst(R, C, RegEx)(R input, RegEx re, const(C)[] format)
if (isSomeString!R && is(C : dchar) && isRegexFor!(RegEx, R));
から新しい文字列を作る。 inputから新しい文字列を構築する。 指定子に従って生成された文字列と置き換えることで format指定子に従って生成された文字列に置き換えることで、新しい文字列を構築する。
すべてのマッチを置き換えるには replaceAll.
Parameters:
R input 検索する文字列
RegEx re 使用するコンパイルされた正規表現
const(C)[] format 置換を生成するためのフォーマット文字列、 フォーマット文字列を参照のこと。
Returns:
最初にマッチした文字列(もしあれば)が置換された同じ型の文字列を返す。 マッチしない場合は、入力文字列そのものを返す。
Examples:
writeln(replaceFirst("noon", regex("n"), "[$&]")); // "[n]oon"
R replaceFirst(alias fun, R, RegEx)(R input, RegEx re)
if (isSomeString!R && isRegexFor!(RegEx, R));
これは一般的な置換ツールであり、以下のようなパターンにマッチする文字列を置換して新しい文字列を作成する。 パターン reにマッチする文字列を input.他のオーバーロード に渡される。 に渡され、ユーザー定義のファンクタfun 。 に渡される。
このバージョンでは input, を参照のこと。 replaceAllですべてのマッチを置き換える。
Returns:
と同じ型の新しい文字列。 inputと同じ型の新しい文字列を返す。 fun の戻り値に置き換えられる。 を返す。 inputそのものを返す。
Examples:
import std.conv : to;
string list = "#21 out of 46";
string newList = replaceFirst!(cap => to!string(to!int(cap.hit)+1))
    (list, regex(`[0-9]+`));
writeln(newList); // "#22 out of 46"
@trusted void replaceFirstInto(Sink, R, C, RegEx)(ref Sink sink, R input, RegEx re, const(C)[] format)
if (isOutputRange!(Sink, dchar) && isSomeString!R && is(C : dchar) && isRegexFor!(RegEx, R));

@trusted void replaceFirstInto(alias fun, Sink, R, RegEx)(Sink sink, R input, RegEx re)
if (isOutputRange!(Sink, dchar) && isSomeString!R && isRegexFor!(RegEx, R));
のバリエーションだ。 replaceFirstのバリエーションである。 に分割して出力する。 sink.特に これは、最終出力をインクリメンタルに効率的に構築することを可能にする。
のように replaceFirst関数 "ファミリーのように、オーバーロードがある。 によって導かれる置換のためのオーバーロードがある。 format文字列 とユーザー定義のコールバックを持つものがある。
Examples:
import std.array;
string m1 = "first message\n";
string m2 = "second message\n";
auto result = appender!string();
replaceFirstInto(result, m1, regex(`([a-z]+) message`), "$1");
// ユーザー定義のコールバックを持つ上記と同等のもの
replaceFirstInto!(cap=>cap[1])(result, m2, regex(`([a-z]+) message`));
writeln(result.data); // "first\nsecond\n"
@trusted R replaceAll(R, C, RegEx)(R input, RegEx re, const(C)[] format)
if (isSomeString!R && is(C : dchar) && isRegexFor!(RegEx, R));
から新しい文字列を作成する。 inputパターン パターン reにマッチするすべてのフラグメントを 指定子に従って生成された文字列で置き換える。 format指定子に従って生成された文字列に置き換える。
最初のマッチだけを置き換えるには replaceFirst.
Parameters:
R input 検索する文字列
RegEx re 使用するコンパイルされた正規表現
const(C)[] format 置換を生成するためのフォーマット文字列、 フォーマット文字列を参照のこと。
Returns:
と同じ型の文字列である。 inputと同じ型の文字列で と同じ型の文字列を返す。 マッチしない場合は、入力文字列そのものを返す。
Examples:
// insert comma as thousands delimiter
auto re = regex(r"(?<=\d)(?=(\d\d\d)+\b)","g");
writeln(replaceAll("12000 + 42100 = 54100", re, ",")); // "12,000 + 42,100 = 54,100"
@trusted R replaceAll(alias fun, R, RegEx)(R input, RegEx re)
if (isSomeString!R && isRegexFor!(RegEx, R));
これは一般的な置換ツールであり、以下のようなパターンにマッチする文字列を置換して新しい文字列を作成する。 パターン reにマッチする文字列を input.他のオーバーロード に渡される。 に渡され、ユーザー定義のファンクタfun 。 に渡される。
このバージョンは input, を参照のこと。 replaceFirstで最初のマッチだけを置き換える。
Returns:
と同じ型の新しい文字列。 inputと同じ型の新しい文字列を返す。 fun の戻り値に置き換えられる。 を返す。 inputそのものを返す。
Parameters:
R input 検索する文字列
RegEx re コンパイルされた正規表現
fun 使用するデリゲート
Examples:
string baz(Captures!(string) m)
{
    import std.string : toUpper;
    return toUpper(m.hit);
}
// 'a'と'r'を大文字にする:
auto s = replaceAll!(baz)("Strap a rocket engine on a chicken.",
        regex("[ar]"));
writeln(s); // "StRAp A Rocket engine on A chicken."(鶏の上にロケットエンジンを載せる。)
@trusted void replaceAllInto(Sink, R, C, RegEx)(Sink sink, R input, RegEx re, const(C)[] format)
if (isOutputRange!(Sink, dchar) && isSomeString!R && is(C : dchar) && isRegexFor!(RegEx, R));

@trusted void replaceAllInto(alias fun, Sink, R, RegEx)(Sink sink, R input, RegEx re)
if (isOutputRange!(Sink, dchar) && isSomeString!R && isRegexFor!(RegEx, R));
のバリエーションだ。 replaceAllのバリエーションである。 に分割して出力する。 sink.特に これは、最終出力をインクリメンタルに効率的に構築することを可能にする。
と同様、2つのオーバーロードがある。 replaceAllと同様、2つのオーバーロードがある、 もう1つはユーザー定義のファンクターである。
Examples:
// カンマを千の区切り文字として50個の大きな数字にランダムに挿入する
import std.array, std.conv, std.random, std.range;
static re = regex(`(?<=\d)(?=(\d\d\d)+\b)`, "g");
auto sink = appender!(char [])();
enum ulong min = 10UL ^^ 10, max = 10UL ^^ 19;
foreach (i; 0 .. 50)
{
    sink.clear();
    replaceAllInto(sink, text(uniform(min, max)), re, ",");
    foreach (pos; iota(sink.data.length - 4, 0, -4))
        writeln(sink.data[pos]); // ','
}
R replace(alias scheme = match, R, C, RegEx)(R input, RegEx re, const(C)[] format)
if (isSomeString!R && isRegexFor!(RegEx, R));

R replace(alias fun, R, RegEx)(R input, RegEx re)
if (isSomeString!R && isRegexFor!(RegEx, R));
置換のための古いAPI、操作はパターンのフラグに依存する re. g "フラグを指定すると replaceAllと同じ動作をする。 と同じ動作をする。 replaceFirst.
この関数の使用は推奨されない。 replaceAll または replaceFirstを明示的に使用してほしい。
struct Splitter(Flag!"keepSeparators" keepSeparators = No.keepSeparators, Range, alias RegEx = Regex) if (isSomeString!Range && isRegexFor!(RegEx, Range));

Splitter!(keepSeparators, Range, RegEx) splitter(Flag!"keepSeparators" keepSeparators = No.keepSeparators, Range, RegEx)(Range r, RegEx pat)
if (is(BasicElementOf!Range : dchar) && isRegexFor!(RegEx, Range));
正規表現を使って文字列 rを分割する。 patを使って文字列を分割する。
Parameters:
keepSeparators フラグを指定する。
Range r 分割する文字列
RegEx pat 分割するパターン
Returns:
文字列の遅延範囲
Examples:
import std.algorithm.comparison : equal;
auto s1 = ", abc, de,  fg, hi, ";
assert(equal(splitter(s1, regex(", *")),
    ["", "abc", "de", "fg", "hi", ""]));
Examples:
パターンで分割するが、マッチは結果の範囲内に留める
import std.algorithm.comparison : equal;
import std.typecons : Yes;

auto pattern = regex(`([\.,])`);

assert("2003.04.05"
    .splitter!(Yes.keepSeparators)(pattern)
    .equal(["2003", ".", "04", ".", "05"]));

assert(",1,2,3"
    .splitter!(Yes.keepSeparators)(pattern)
    .equal([",", "1", ",", "2", ",", "3"]));
@property Range front();

@property bool empty();

void popFront();

@property auto save();
前進レンジのプリミティブ。
@trusted String[] split(String, RegEx)(String input, RegEx rx)
if (isSomeString!String && isRegexFor!(RegEx, String));
のスライスを分割した配列を作成するsplitter のイージー・バージョンである。 input.
alias RegexException = std.regex.internal.ir.RegexException;
正規表現のコンパイル中にエラーが発生した場合にスローされる例外オブジェクト。
auto escaper(Range)(Range r);
をエスケープした文字列出力を遅延的に生成する範囲。 正規表現内で使用する。
Examples:
import std.algorithm.comparison;
import std.regex;
string s = `This is {unfriendly} to *regex*`;
assert(s.escaper.equal(`This is \{unfriendly\} to \*regex\*`));