正規表現ツール |
grep |
PowerGREP |
RegexBuddy |
RegexMagic |
汎用アプリケーション |
EditPad Lite |
EditPad Pro |
言語とライブラリ |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML Schema |
Xojo |
XQuery と XPath |
XRegExp |
データベース |
MySQL |
Oracle |
PostgreSQL |
このサイトの詳細 |
はじめに |
正規表現クイックスタート |
正規表現チュートリアル |
置換文字列チュートリアル |
アプリケーションと言語 |
正規表現の例 |
正規表現リファレンス |
置換文字列リファレンス |
書籍レビュー |
印刷可能な PDF |
このサイトについて |
RSS フィードとブログ |
C# (C シャープ) や Visual Basic.NET などの .NET プログラミング言語で使用できる Microsoft .NET は、正規表現を強力にサポートしています。.NET の正規表現フレーバーは非常に機能豊富です。不足している注目すべき機能は、所有格量指定子とサブルーチン呼び出しのみです。
.NET Framework バージョン 2.0 から 4.8 まで、サポートされる正規表現フレーバーに違いはありません。このフレーバーと、.NET Core のどのバージョンでサポートされるフレーバーにも違いはありません。これには、元の .NET Core 1.0.0 と最新の .NET 5.0 が含まれます。
.NET Framework 1.x の正規表現フレーバーとそれ以降のバージョンには、いくつかの違いがあります。.NET Framework 2.0 では、いくつかのバグが修正されています。Unicode カテゴリ\p{Pi}と\p{Pf}は逆になりません。名前にハイフンを含むUnicode ブロックが正しく処理されるようになりました。.NET 2.0 では、文字クラスの減算という機能が 1 つ追加されました。XML スキーマ正規表現と同じように機能します。XML スキーマ標準では、この機能とその構文が最初に定義されました。
正規表現クラスは、System.Text.RegularExpressions 名前空間にあります。使用できるようにするには、ソースコードの先頭にImports System.Text.RegularExpressionsを配置します。
Regexクラスは、正規表現をコンパイルするために使用するクラスです。効率を高めるために、正規表現は内部形式にコンパイルされます。同じ正規表現を繰り返し使用する場合は、Regexオブジェクトを次のように構築しますDim RegexObj as Regex = New Regex("regularexpression")。その後、RegexObj.IsMatch("subject")を呼び出して、正規表現が対象文字列と一致するかどうかを確認できます。RegexRegexコンストラクタでは、RegexOptions型のオプションの 2 番目のパラメータを指定できます。正規表現で大文字と小文字を区別しないようにするには、最後のパラメータとしてRegexOptions.IgnoreCaseを指定します。その他のオプションは、正規表現をフリースペーシングにするIgnorePatternWhitespace、ドットを改行線と一致させるRegexOptions.Singleline、対象文字列内の埋め込み改行線でキャレットとドル記号を一致させるRegexOptions.Multiline、名前のないすべてのグループをキャプチャしないグループに変換するRegexOptions.ExplicitCapture
です。RegexObj.Replace("subject", "replacement")を呼び出して、対象文字列で正規表現を使用して検索と置換を実行し、すべての一致を置換文字列に置き換えます。置換文字列では、$&$&$1, $2, $3$1$$$$${1}9${1}9$19$19${name}を使用します。 $記号を不適切に使用すると、望ましくない結果文字列が生成される可能性がありますが、例外が発生することはありません。
RegexObj.Split("Subject")は、正規表現の一致に沿って対象文字列を分割し、文字列の配列を返します。配列には、正規表現の一致間のテキストが含まれています。正規表現にキャプチャ括弧が含まれている場合、それらと一致するテキストも配列に含まれます。正規表現全体の一致を配列に含める場合は、RegexObj.
Regexをインスタンス化する際に、正規表現全体を括弧で囲みます。 Regexクラスには、RegexRegexRegexRegex
クラスで多く使用されていることに注意してください。すべての静的メソッドは、他の非静的メソッドと同じ名前(ただしパラメータリストは異なります)を持ちます。Regex.IsMatch("subject", "regex")は、正規表現が対象文字列と一致するかどうかを確認します。Regex.Replace("subject", "regex", "replacement")は、検索と置換を実行します。Regex.Split("subject", "regex")コンストラクタでは、RegexOptions
正規表現の一致に関する詳細情報が必要な場合は、Regex.Match()を呼び出してMatchオブジェクトを構築します。RegexRegexDim MatchObj as Match = RegexObj.Match("subject")を使用します。そうでない場合は、静的バージョンDim MatchObj as Match = Regex.Match("subject", "regex").
を使用します。いずれの場合も、対象文字列の最初の正規表現の一致に関する詳細を保持するMatchMatchクラスのオブジェクトが取得されます。MatchObj.SuccessMatchObj.Valueを、一致の長さを取得するためにMatchObj.Lengthを、対象文字列内での一致の開始位置を取得するためにMatchObj.Indexを使用します。一致の開始はゼロベースであるため、事実上一致の左側の対象文字列内の文字数がカウントされます。
正規表現にキャプチャ括弧が含まれている場合は、MatchObj.Groupsコレクションを使用します。MatchObj.Groups.Countは、キャプチャ括弧の数を示します。カウントには、正規表現全体の一致であるゼロ番目のグループが含まれます。MatchObj.Groups(3).Valueは、3番目の括弧のペアと一致するテキストを取得します。MatchObj.Groups(3).LengthとMatchObj.Groups(3).Indexは、グループと一致するテキストの長さと、対象文字列の開始位置を基準とした対象文字列内でのインデックスを取得します。MatchObj.Groups("name")は、名前付きグループ「name」の詳細を取得します。
同じ対象文字列で正規表現の次の一致を見つけるには、2回目の一致試行の結果を含む新しいMatchObj.NextMatch()MatchMatchMatchObj.NextMatch()NextMatch()クラスのオブジェクトが取得されます。MatchObj.Success
がFalseになるまで呼び出すことができます。RegexObj.Match()を呼び出した後、結果のMatchMatchRegexObjRegexObjMatchMatchRegexRegex
C#リテラル文字列、およびC ++や他の多くの.NET言語では、バックスラッシュはエスケープ文字です。リテラル文字列"\\""\\"\\"\\\\""\\\\""\\\\\\\\"
正規表現\wは単語文字と一致します。 C#文字列として、これは"\\w".
と記述されます。コードを読みやすくするために、C#逐語的文字列を使用する必要があります。逐語的文字列では、バックスラッシュは通常の文字です。これにより、RegexBuddyやPowerGREPなどのツールに記述する場合、またはユーザーがアプリケーションに入力する場合と同じように、C#コードに正規表現を記述できます。バックスラッシュと一致する正規表現は、C#逐語的文字列を使用する場合、@"\\"@"\\"@"\w".
RegexOptions.ECMAScriptRegexOptions.ECMAScriptRegex()コンストラクタに渡すと、特定の正規表現機能の動作がECMA-262標準で規定されている動作に従うように変更されます。この標準は、JavaScriptとしてよく知られているECMAScript言語を定義しています。以下の表は、標準の.NET(ECMAScriptオプションなし)とECMAScirptモードの.NETの違いを比較しています。参考までに、この表では、最新のブラウザのJavaScriptがこれらの領域でどのように動作するかも比較しています。
機能または構文 | 標準の .NET | .NET (ECMAScript モード) | JavaScript |
---|---|---|---|
JavaScript | RegexOptions.FreeSpacing | サポート済み | のみでサポートサポートされていません |
RegexOptions.SingleLine | RegexOptions.FreeSpacing | サポート済みサポート済み | サポートされていません |
、名前のないすべてのグループをキャプチャしないグループに変換する | RegexOptions.FreeSpacing | サポート済みサポート済み | サポートされていません |
サポートされていません | 正規表現トークンを形成しないエスケープされた文字またはアンダースコア | エラー | |
リテラル文字またはアンダースコア | 正規表現トークンを形成しないエスケープされた文字またはアンダースコア | リテラル文字またはアンダースコア | |
有効な逆参照ではないエスケープされた数字 | 正規表現トークンを形成しないエスケープされた文字またはアンダースコア | 8進エスケープまたはリテラル8または9 | |
リテラル数字 | 有効な逆参照を形成しないエスケープされた2桁の数字 | 単一数字の逆参照が有効な場合は単一数字の逆参照とリテラル数字。そうでない場合は、単一または2桁の8進エスケープおよび/またはリテラル8と9 | |
リテラル数字 | RegexOptions.FreeSpacing | 正規表現トークンを形成しないエスケープされた文字またはアンダースコア | 単一数字の逆参照が有効な場合は単一数字の逆参照とリテラル数字。そうでない場合は、単一または2桁の8進エスケープおよび/またはリテラル8と9 |
不参加グループへの逆参照 | 有効な逆参照を形成しないエスケープされた2桁の数字 | 単一数字の逆参照が有効な場合は単一数字の逆参照とリテラル数字。そうでない場合は、単一または2桁の8進エスケープおよび/またはリテラル8と9 | 一致に失敗する |
長さゼロの一致 | \s | Unicode | \s |
\d | \s | Unicode | |
\w | \s | Unicode | |
Unicode | \s | Unicode |
UnicodeRegexOptions.ECMAScriptRegexOptions.ECMAScriptRegexOptions.ECMAScriptRegexOptions.ECMAScript
この表では、JavaScript 用の XRegExp ライブラリについても比較しています。このライブラリを使用すると、JavaScript の正規表現フレーバーを .NET のフレーバーに少し近づけることができます。
機能または構文 | .NET | XRegExp | JavaScript |
---|---|---|---|
ドット | [^\n] | [^\n\r\u2028\u2029] | |
複数行モードのアンカー | 以下の文字のみを\n改行として扱う | 以下の文字を\n, \r, \u2028、そして\u2029改行として扱う | |
$複数行モードなし | 文字列の末尾に一致 | 文字列の末尾と最後の改行の前に一致 | |
文字列の開始と終了の固定アンカー | RegexOptions.FreeSpacing | サポートされていません | |
空の文字クラス | 一致に失敗する | 有効な逆参照を形成しないエスケープされた2桁の数字 | |
後読み | 制限なしでサポート | ECMAScript 2018 以降、(制限なしで)サポート | |
モード修飾子 | どこでも | 正規表現の先頭のみ | サポートされていません |
コメント | RegexOptions.FreeSpacing | サポートされていません | |
Unicode プロパティ | カテゴリとブロック | サポートされていません | |
名前付きキャプチャと後方参照 | RegexOptions.FreeSpacing | サポートされていません | |
バランスグループ | RegexOptions.FreeSpacing | サポートされていません | |
条件式 | RegexOptions.FreeSpacing | サポートされていません |
書籍『Mastering Regular Expressions』では、.NET 独自の正規表現機能を含む、正規表現について知りたいこと、知りたくないことすべてを解説しています。.NET の System.Text.RegularExpressions 名前空間に関する優れた章があり、Microsoft のドキュメントよりもはるかに優れた方法でさまざまな Regex クラスを説明し、VB.NET のサンプルコードと、より高度なテクニックを示す C# コードを豊富に掲載しています。
『Mastering Regular Expressions』のレビュー
| クイックスタート | チュートリアル | ツールと言語 | 例 | リファレンス | 書籍レビュー |
| grep | PowerGREP | RegexBuddy | RegexMagic |
| EditPad Lite | EditPad Pro |
| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery & XPath | XRegExp |
| MySQL | Oracle | PostgreSQL |
ページ URL: https://regular-expressions.dokyumento.jp/dotnet.html
ページ最終更新日: 2021年8月24日
サイト最終更新日: 2024年3月15日
著作権 © 2003-2024 Jan Goyvaerts. All rights reserved.