英語版
このページの英語版を見る
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");
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.
std.regexはコードポイントレベルで動作する、
この表で'character'は単一のUnicodeコードポイントを表す。
構文と一般情報
一般的な使い方のガイドラインは、正規表現の複雑さを単純さの側に置くことである、 なぜなら、その機能は純粋に文字レベルの操作にしかないからだ。 そのため、より高度な不変量を含むタスクには不向きである。 たとえば、[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 コードポイントレベルで操作する。
フォーマット文字列を置き換える
置換を行うこのモジュールの一連の関数は、そのプロセスを導く簡単な書式に依存している。 を行うこのモジュールの一連の関数は、処理を導くための単純な書式に依存している。特に以下の表は のformat 引数に適用される。 replaceFirstと replaceAll. フォーマット文字列は、以下の記法を用いてマッチの一部を参照することができる。Format specifier | Replaced by |
ドル | マッチ全体。 |
dollar;` | マッチに先行する入力の一部。 |
$' | マッチに続く入力の一部。 |
$$ | '$' 文字。 |
\c (cは任意の文字である | cは任意の文字である。 |
\\ | 文字。 |
ドル;1 ... ドル;99 | それぞれサブマッチ番号1~99。 |
スライシングとゼロ・メモリ割り当てのオリエンテーション
このライブラリーのパターンマッチング関数が返すマッチはすべて は元の入力のスライスである。注目すべき例外はreplace 入力から新しい文字列を生成する関数群である。 置換を生成することが最終目的である場合 replaceFirstIntoであり replaceAllInto便利である 置き換えのためのアロケーションを回避する関数として。License:
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
StaticRegex
はRegex オブジェクトである。 を含むオブジェクトである。もはや使用されていないが、後方互換性のためにRegexのエイリアスとして保持されている。 - @trusted auto
regex
(S : C[], C)(const S[]patterns
, const(char)[]flags
= "")
if (isSomeString!S);
@trusted autoregex
(S)(Spattern
, 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 Rback
();
voidpopFront
();
voidpopBack
();
const @property boolempty
();
inout inout(R)opIndex
()(size_ti
); - 範囲インターフェイス。
- 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)(Stringi
)
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 Rpost
();
@property Rhit
(); - front.pre、front.post、front.hitの短縮形である。
- inout @property inout(Captures!R)
front
();
voidpopFront
();
autosave
(); - 範囲インターフェイスを介してグローバル正規表現の後続のマッチを処理する機能:
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)(Rinput
, RegExre
)
if (isSomeString!R && isRegexFor!(RegEx, R));
automatch
(R, String)(Rinput
, Stringre
)
if (isSomeString!R && isSomeString!String); - マッチを開始する
input
正規表現パターンre
, にマッチングを開始する。この関数の使用は推奨されない。 matchAllまたは matchFirst. 操作の種類を "g"フラグに委ねる を "g"フラグに委譲することは、正確なマッチング方式を選択する機能とともに、まもなく廃止される予定である。 正確なマッチング方式を選択する機能とともに廃止される。どの 使用するマッチングスキームの選択はパターンの種類に大きく依存する。 ケースバイケースで自動的に行われる。Returns:最初のマッチ後のエンジン状態を保持するRegexMatch オブジェクト。 - auto
matchFirst
(R, RegEx)(Rinput
, RegExre
)
if (isSomeString!R && isRegexFor!(RegEx, R));
automatchFirst
(R, String)(Rinput
, Stringre
)
if (isSomeString!R && isSomeString!String);
automatchFirst
(R, String)(Rinput
, String[]re
...)
if (isSomeString!R && isSomeString!String); - の最初の(左端の)スライスを見つける。
input
その パターンにマッチするre
.この"関数"は、パターンのプロパティに応じて最適な正規表現エンジンを選ぶ。 正規表現エンジンを選ぶ。re
パラメータには3つの型がある:- プレーンな文字列。この場合、マッチング前にバイトコードにコンパイルされる。
- Regex!char(wchar/dchar):コンパイルされたバイトコード形式のパターンを含む。 バイトコードにコンパイルされる。
- staticRegex!char(wchar/dchar)で、コンパイルされたネイティブ・マシンコード形式のパターンを含む。 コンパイルされたネイティブ・マシン・コードの形でパターンを含む。
- auto
matchAll
(R, RegEx)(Rinput
, RegExre
)
if (isSomeString!R && isRegexFor!(RegEx, R));
automatchAll
(R, String)(Rinput
, Stringre
)
if (isSomeString!R && isSomeString!String);
automatchAll
(R, String)(Rinput
, 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)(Rinput
, RegExre
)
if (isSomeString!R && isRegexFor!(RegEx, R));
autobmatch
(R, String)(Rinput
, Stringre
)
if (isSomeString!R && isSomeString!String); - 正規表現パターンへの
input
正規表現パターンre
, のマッチングを開始する。この関数の使用は推奨されない。 matchAllまたは matchFirst. 操作の種類を "g"フラグに委ねる を "g"フラグに委譲することは、正確なマッチング方式を選択する機能とともに、まもなく廃止される予定である。 正確なマッチング方式を選択する機能とともに廃止される。どの 使用するマッチングスキームの選択はパターンの種類に大きく依存する。 ケースバイケースで自動的に行われる。Returns:RegexMatch オブジェクトはエンジン オブジェクトを保持する。 - R
replaceFirst
(R, C, RegEx)(Rinput
, RegExre
, 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)(Rinput
, RegExre
)
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 Sinksink
, Rinput
, RegExre
, const(C)[]format
)
if (isOutputRange!(Sink, dchar) && isSomeString!R && is(C : dchar) && isRegexFor!(RegEx, R));
@trusted voidreplaceFirstInto
(alias fun, Sink, R, RegEx)(Sinksink
, Rinput
, RegExre
)
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)(Rinput
, RegExre
, 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)(Rinput
, RegExre
)
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)(Sinksink
, Rinput
, RegExre
, const(C)[]format
)
if (isOutputRange!(Sink, dchar) && isSomeString!R && is(C : dchar) && isRegexFor!(RegEx, R));
@trusted voidreplaceAllInto
(alias fun, Sink, R, RegEx)(Sinksink
, Rinput
, RegExre
)
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)(Rinput
, RegExre
, const(C)[]format
)
if (isSomeString!R && isRegexFor!(RegEx, R));
Rreplace
(alias fun, R, RegEx)(Rinput
, RegExre
)
if (isSomeString!R && isRegexFor!(RegEx, R)); - 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)(Ranger
, RegExpat
)
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 boolempty
();
voidpopFront
();
@property autosave
(); - 前進レンジのプリミティブ。
- @trusted String[]
split
(String, RegEx)(Stringinput
, RegExrx
)
if (isSomeString!String && isRegexFor!(RegEx, String)); - のスライスを分割した配列を作成するsplitter のイージー・バージョンである。
input
. - alias
RegexException
= std.regex.internal.ir.RegexException
; - 正規表現のコンパイル中にエラーが発生した場合にスローされる例外オブジェクト。
- auto
escaper
(Range)(Ranger
); - をエスケープした文字列出力を遅延的に生成する範囲。 正規表現内で使用する。Examples:
import std.algorithm.comparison; import std.regex; string s = `This is {unfriendly} to *regex*`; assert(s.escaper.equal(`This is \{unfriendly\} to \*regex\*`));
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku