クイックスタート
チュートリアル
ツールと言語
リファレンス
書籍レビュー
正規表現ツール
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 フィードとブログ
RegexBuddy—The best regex editor and tester for .NET developers!

Microsoft .NET での正規表現の使用

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 の概要 (VB.NET 構文を使用)

正規表現クラスは、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

System.Text.RegularExpressions.Match クラス

正規表現の一致に関する詳細情報が必要な場合は、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).LengthMatchObj.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#逐語的文字列を使用する必要があります。逐語的文字列では、バックスラッシュは通常の文字です。これにより、RegexBuddyPowerGREPなどのツールに記述する場合、またはユーザーがアプリケーションに入力する場合と同じように、C#コードに正規表現を記述できます。バックスラッシュと一致する正規表現は、C#逐語的文字列を使用する場合、@"\\"@"\\"@"\w".

RegexOptions.ECMAScript

RegexOptions.ECMAScriptRegexOptions.ECMAScriptRegex()コンストラクタに渡すと、特定の正規表現機能の動作がECMA-262標準で規定されている動作に従うように変更されます。この標準は、JavaScriptとしてよく知られているECMAScript言語を定義しています。以下の表は、標準の.NET(ECMAScriptオプションなし)とECMAScirptモードの.NETの違いを比較しています。参考までに、この表では、最新のブラウザのJavaScriptがこれらの領域でどのように動作するかも比較しています。

機能または構文標準の .NET.NET (ECMAScript モード)JavaScript
JavaScriptRegexOptions.FreeSpacingサポート済み(?x) のみでサポートサポートされていません
RegexOptions.SingleLineRegexOptions.FreeSpacingサポート済みサポート済み (?s)サポートされていません
名前のないすべてのグループをキャプチャしないグループに変換するRegexOptions.FreeSpacingサポート済みサポート済み (?n)サポートされていません
サポートされていません正規表現トークンを形成しないエスケープされた文字またはアンダースコアエラー
リテラル文字またはアンダースコア正規表現トークンを形成しないエスケープされた文字またはアンダースコアリテラル文字またはアンダースコア
有効な逆参照ではないエスケープされた数字正規表現トークンを形成しないエスケープされた文字またはアンダースコア8進エスケープまたはリテラル8または9
リテラル数字有効な逆参照を形成しないエスケープされた2桁の数字単一数字の逆参照が有効な場合は単一数字の逆参照とリテラル数字。そうでない場合は、単一または2桁の8進エスケープおよび/またはリテラル8と9
リテラル数字RegexOptions.FreeSpacing正規表現トークンを形成しないエスケープされた文字またはアンダースコア単一数字の逆参照が有効な場合は単一数字の逆参照とリテラル数字。そうでない場合は、単一または2桁の8進エスケープおよび/またはリテラル8と9
不参加グループへの逆参照有効な逆参照を形成しないエスケープされた2桁の数字単一数字の逆参照が有効な場合は単一数字の逆参照とリテラル数字。そうでない場合は、単一または2桁の8進エスケープおよび/またはリテラル8と9一致に失敗する
長さゼロの一致\sUnicode\s
\d\sUnicode
\w\sUnicode
Unicode\sUnicode

UnicodeRegexOptions.ECMAScriptRegexOptions.ECMAScriptRegexOptions.ECMAScriptRegexOptions.ECMAScript

この表では、JavaScript 用の XRegExp ライブラリについても比較しています。このライブラリを使用すると、JavaScript の正規表現フレーバーを .NET のフレーバーに少し近づけることができます。

機能または構文.NETXRegExpJavaScript
ドット[^\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書籍『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 |