Regex.Replace メソッド

定義

指定した入力文字列内で正規表現パターンに一致する文字列を、指定した置換文字列に置き換えます。

オーバーロード

Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan)

指定した入力文字列内で、指定した正規表現に一致するすべての部分文字列を、MatchEvaluator デリゲートによって返される文字列に置き換えます。 追加のパラメーターでは、一致が見つからない場合に一致操作とタイムアウト間隔を変更するオプションを指定します。

Replace(String, String, String, RegexOptions, TimeSpan)

指定した入力文字列内で指定した正規表現に一致するすべての文字列を、指定した置換文字列に置換します。 追加のパラメーターでは、一致が見つからない場合に一致操作とタイムアウト間隔を変更するオプションを指定します。

Replace(String, MatchEvaluator, Int32, Int32)

指定した入力部分文字列内で正規表現パターンに一致する文字列を、指定した最大回数だけ、MatchEvaluator デリゲートによって返される文字列に置き換えます。

Replace(String, String, MatchEvaluator, RegexOptions)

指定した入力文字列内で、指定した正規表現に一致するすべての文字列を MatchEvaluator デリゲートによって返される文字列に置き換えます。 指定したオプションで、一致操作を変更します。

Replace(String, String, Int32, Int32)

指定した入力部分文字列内で正規表現パターンに一致する文字列を、指定した最大回数だけ、指定した置換文字列に置換します。

Replace(String, String, String, RegexOptions)

指定した入力文字列内で指定した正規表現に一致するすべての文字列を、指定した置換文字列に置換します。 指定したオプションで、一致操作を変更します。

Replace(String, String, MatchEvaluator)

指定した入力文字列内で、指定した正規表現に一致するすべての文字列を MatchEvaluator デリゲートによって返される文字列に置き換えます。

Replace(String, String, String)

指定した入力文字列内で指定した正規表現に一致するすべての文字列を、指定した置換文字列に置換します。

Replace(String, String, Int32)

指定した入力文字列内で正規表現パターンに一致する文字列を、指定した最大回数だけ、指定した置換文字列に置換します。

Replace(String, MatchEvaluator)

指定した入力文字列内で、指定した正規表現に一致するすべての文字列を MatchEvaluator デリゲートによって返される文字列に置き換えます。

Replace(String, String)

指定した入力文字列内で正規表現パターンに一致するすべての文字列を、指定した置換文字列に置換します。

Replace(String, MatchEvaluator, Int32)

指定した入力文字列内で正規表現パターンに一致する文字列を、指定した最大回数だけ、MatchEvaluator デリゲートによって返される文字列に置き換えます。

Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan)

指定した入力文字列内で、指定した正規表現に一致するすべての部分文字列を、MatchEvaluator デリゲートによって返される文字列に置き換えます。 追加のパラメーターでは、一致が見つからない場合に一致操作とタイムアウト間隔を変更するオプションを指定します。

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, System::Text::RegularExpressions::RegexOptions options, TimeSpan matchTimeout);
public static string Replace (string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator * System.Text.RegularExpressions.RegexOptions * TimeSpan -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator, options As RegexOptions, matchTimeout As TimeSpan) As String

パラメーター

input
String

一致する対象を検索する文字列。

pattern
String

一致させる正規表現パターン。

evaluator
MatchEvaluator

各一致文字列を調べ、元の一致文字列または置換文字列のどちらかを返すカスタム メソッド。

options
RegexOptions

一致オプションを指定する列挙値のビットごとの組み合わせ。

matchTimeout
TimeSpan

タイムアウト期間、またはメソッドがタイムアウトしないことを示す InfiniteMatchTimeout

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 pattern が現在のインスタンス内で一致しない場合、メソッドは現在のインスタンスを変更せずに返します。

例外

正規表現の解析エラーが発生しました。

inputpattern、または evaluatornull です。

options は、RegexOptions 値のビットごとの正しい組み合わせではありません。

  • または - matchTimeout が負の値か、0 か、または約 24 日を超えています。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、正規表現を使用して文字列から個々の単語を抽出し、デリゲートを使用して、 という名前のメソッドを呼び出し、単語内の個々の文字をスクレイブル MatchEvaluator WordScramble します。 これを行うには、 WordScramble メソッドによって、一致する文字を含む配列が作成されます。 また、ランダム浮動小数点数を設定する並列配列も作成されます。 配列は メソッドを呼び出して並べ替え、並べ替えた配列はクラス コンストラクターの Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) 引数として String 提供されます。 この新しく作成された文字列は、 メソッドによって返 WordScramble されます。 正規表現パターンは 1 つ以上の単語文字と一致します。正規表現エンジンは、空白文字などの単語以外の文字が検出されるまで、引き続き一致に文字を追加します \w+ 。 メソッドの呼び出しには オプションが含まれるので、正規表現パターンのコメントは正規表現 Replace(String, String, MatchEvaluator, RegexOptions) RegexOptions.IgnorePatternWhitespace \w+ # Matches all the characters in a word. エンジンによって無視されます。

using System;
using System.Collections;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string words = "letter alphabetical missing lack release " + 
                     "penchant slack acryllic laundry cease";
      string pattern = @"\w+  # Matches all the characters in a word.";                            
      MatchEvaluator evaluator = new MatchEvaluator(WordScrambler);
      Console.WriteLine("Original words:");
      Console.WriteLine(words);
      Console.WriteLine();
      try {
         Console.WriteLine("Scrambled words:");
         Console.WriteLine(Regex.Replace(words, pattern, evaluator, 
                                         RegexOptions.IgnorePatternWhitespace,
                                         TimeSpan.FromSeconds(.25)));      
      }
      catch (RegexMatchTimeoutException) {
         Console.WriteLine("Word Scramble operation timed out.");
         Console.WriteLine("Returned words:");
      }
   }

   public static string WordScrambler(Match match)
   {
      int arraySize = match.Value.Length;
      // Define two arrays equal to the number of letters in the match.
      double[] keys = new double[arraySize];
      char[] letters = new char[arraySize];
      
      // Instantiate random number generator'
      Random rnd = new Random();
      
      for (int ctr = 0; ctr < match.Value.Length; ctr++)
      {
         // Populate the array of keys with random numbers.
         keys[ctr] = rnd.NextDouble();
         // Assign letter to array of letters.
         letters[ctr] = match.Value[ctr];
      }         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default);      
      return new String(letters);
   }
}
// The example displays output similar to the following:
//    Original words:
//    letter alphabetical missing lack release penchant slack acryllic laundry cease
//    
//    Scrambled words:
//    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae
Imports System.Collections
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim words As String = "letter alphabetical missing lack release " + _
                            "penchant slack acryllic laundry cease"
      Dim pattern As String = "\w+  # Matches all the characters in a word."                            
      Dim evaluator As MatchEvaluator = AddressOf WordScrambler
      Console.WriteLine("Original words:")
      Console.WriteLine(words)
      Try
         Console.WriteLine("Scrambled words:")
         Console.WriteLine(Regex.Replace(words, pattern, evaluator,
                                         RegexOptions.IgnorePatternWhitespace,
                                         TimeSpan.FromSeconds(.25)))      
      Catch e As RegexMatchTimeoutException
         Console.WriteLine("Word Scramble operation timed out.")
         Console.WriteLine("Returned words:")
      End Try   
   End Sub
   
   Public Function WordScrambler(match As Match) As String
      Dim arraySize As Integer = match.Value.Length - 1
      ' Define two arrays equal to the number of letters in the match.
      Dim keys(arraySize) As Double
      Dim letters(arraySize) As Char
      
      ' Instantiate random number generator'
      Dim rnd As New Random()
      
      For ctr As Integer = 0 To match.Value.Length - 1
         ' Populate the array of keys with random numbers.
         keys(ctr) = rnd.NextDouble()
         ' Assign letter to array of letters.
         letters(ctr) = match.Value.Chars(ctr)
      Next         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default)      
      Return New String(letters)
   End Function
End Module
' The example displays output similar to the following:
'    Original words:
'    letter alphabetical missing lack release penchant slack acryllic laundry cease
'    
'    Scrambled words:
'    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae

注釈

メソッド Regex.Replace(String, String, MatchEvaluator, RegexOptions) は、次の条件に当てはまる場合に正規表現の一致を置き換える場合に便利です。

  • 置換文字列を正規表現置換パターンで簡単に指定できない場合。

  • 置換文字列が、一致する文字列に対して実行された処理の結果である場合。

  • 置換文字列が条件付き処理の結果である場合。

メソッドは、 メソッドを呼び出し、返されたコレクション内の各オブジェクトを Regex.Matches(String, String, RegexOptions) Match MatchCollection デリゲートに渡すのと同 evaluator じです。

パラメーター pattern は、一致する文字列をシンボル的に記述する正規表現言語要素で構成されます。 正規表現の詳細については、「正規表現と正規表現.NET Frameworkのクイック リファレンス」を参照してください

パラメーター evaluator は、定義し、各一致を調べるカスタム メソッドのデリゲートです。 カスタム メソッドには、デリゲートと一致する次のシグネチャが必要 MatchEvaluator です。

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

カスタム メソッドは、一致した入力を置き換える文字列を返します。

パラメーターに を指定した場合、一致の検索は入力文字列の末尾から始まり、左に移動します。それ以外の場合、検索は入力文字列の開始位置から始まり、右に移動します。 RightToLeft options

パラメーターは、パターン マッチング メソッドが一致を見つけるのを試みる期間 matchTimeout を指定します。タイム アウト間隔を設定すると、過剰なバックトラッキングに依存する正規表現は、"近い一致を含む入力を処理するときに応答を停止する" と表示されるのを防ぐ。 詳細については、「正規表現のベスト プラクティス」と「バックトラッキング」を参照してください。 その時間間隔で一致が見つからない場合、メソッドは例外をスロー RegexMatchTimeoutException します。 matchTimeout は、 メソッドが実行されるアプリケーション ドメインに対して定義されている既定のタイム アウト値をオーバーライドします。

一致がない場合、メソッドは変更されずに返すので、 メソッドを使用して、メソッドが入力文字列に置き換えされているかどうかを input Object.ReferenceEquals 判断できます。

注意 (呼び出し元)

パラメーターを適切な値 matchTimeout (2 秒など) に設定することをお勧めします。 を指定してタイム アウトを無効にすると、 InfiniteMatchTimeout 正規表現エンジンのパフォーマンスが若干向上します。 ただし、次の条件下でのみ、タイム アウトを無効にする必要があります。

  • 正規表現によって処理された入力が既知の信頼できるソースから派生した場合、または静的テキストで構成されている場合。 これにより、ユーザーによって動的に入力されたテキストは除外されます。

  • 正規表現パターンが完全にテストされ、一致、一致しない、近い一致が効率的に処理される場合。

  • 正規表現パターンに、ほぼ一致を処理するときに過剰なバックトラッキングを引き起こすと知られている言語要素が含まれている場合。

こちらもご覧ください

適用対象

Replace(String, String, String, RegexOptions, TimeSpan)

指定した入力文字列内で指定した正規表現に一致するすべての文字列を、指定した置換文字列に置換します。 追加のパラメーターでは、一致が見つからない場合に一致操作とタイムアウト間隔を変更するオプションを指定します。

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement, System::Text::RegularExpressions::RegexOptions options, TimeSpan matchTimeout);
public static string Replace (string input, string pattern, string replacement, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);
static member Replace : string * string * string * System.Text.RegularExpressions.RegexOptions * TimeSpan -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String, options As RegexOptions, matchTimeout As TimeSpan) As String

パラメーター

input
String

一致する対象を検索する文字列。

pattern
String

一致させる正規表現パターン。

replacement
String

置換文字列。

options
RegexOptions

一致オプションを指定する列挙値のビットごとの組み合わせ。

matchTimeout
TimeSpan

タイムアウト期間、またはメソッドがタイムアウトしないことを示す InfiniteMatchTimeout

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 pattern が現在のインスタンス内で一致しない場合、メソッドは現在のインスタンスを変更せずに返します。

例外

正規表現の解析エラーが発生しました。

inputpattern、または replacementnull です。

options は、RegexOptions 値のビットごとの正しい組み合わせではありません。

  • または - matchTimeout が負の値か、0 か、または約 24 日を超えています。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、メソッドを使用して、 Replace(String, String, String, RegexOptions, TimeSpan) UNC パスのローカルコンピューターとドライブ名をローカルファイルパスに置き換えます。 この正規表現では、プロパティを使用して Environment.MachineName ローカルコンピューターの名前を指定し、メソッドを使用して Environment.GetLogicalDrives 論理ドライブの名前を含めています。 すべての正規表現文字列比較では大文字と小文字が区別されず、0.5 秒で一致するものが見つからない場合は、1回の置換操作がタイムアウトになります。 例を正しく実行するには、リテラル文字列 "MyMachine" をローカルコンピューター名に置き換える必要があります。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      // Get drives available on local computer and form into a single character expression.
      string[] drives = Environment.GetLogicalDrives();
      string driveNames = String.Empty;
      foreach (string drive in drives)
         driveNames += drive.Substring(0,1);
      // Create regular expression pattern dynamically based on local machine information.
      string pattern = @"\\\\" + Environment.MachineName + @"(?:\.\w+)*\\([" + driveNames + @"])\$";

      string replacement = "$1:";
      string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", 
                            @"\\MyMachine\c$\ThingsToDo.txt", 
                            @"\\MyMachine\d$\documents\mydocument.docx" }; 
      
      foreach (string uncPath in uncPaths)
      {
         Console.WriteLine("Input string: " + uncPath);
         string localPath = null;
         try {
            localPath = Regex.Replace(uncPath, pattern, replacement, 
                                      RegexOptions.IgnoreCase,
                                      TimeSpan.FromSeconds(0.5));
            Console.WriteLine("Returned string: " + localPath);
         }
         catch (RegexMatchTimeoutException) {
            Console.WriteLine("The replace operation timed out.");
            Console.WriteLine("Returned string: " + localPath);
            if (uncPath.Equals(localPath)) 
               Console.WriteLine("Equal to original path.");
            else
               Console.WriteLine("Original string: " + uncPath);
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
//    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
//    Returned string: C:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\c$\ThingsToDo.txt
//    Returned string: c:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\d$\documents\mydocument.docx
//    Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      ' Get drives available on local computer and form into a single character expression.
      Dim drives() As String = Environment.GetLogicalDrives()
      Dim driveNames As String = Nothing
      For Each drive As String In drives
         driveNames += drive.Substring(0,1)
      Next
      ' Create regular expression pattern dynamically based on local machine information.
      Dim pattern As String = "\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"

      Dim replacement As String = "$1:"
      Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
                                  "\\MyMachine\c$\ThingsToDo.txt", _
                                  "\\MyMachine\d$\documents\mydocument.docx" } 
      
      For Each uncPath As String In uncPaths
         Console.WriteLine("Input string: " + uncPath)
         Dim localPath As String = Nothing
         Try
            localPath = Regex.Replace(uncPath, pattern, replacement, 
                                                               RegexOptions.IgnoreCase,
                                                               TimeSpan.FromSeconds(0.5))
            Console.WriteLine("Returned string: " + localPath)         
         Catch e As RegexMatchTimeoutException
            Console.WriteLine("The replace operation timed out.")
            Console.WriteLine("Returned string: " + localPath)
            If uncPath.Equals(localPath) Then 
               Console.WriteLine("Equal to original path.")
            Else
               Console.WriteLine("Original string: " + uncPath)
            End If
         End Try         
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
'    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
'    Returned string: C:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\c$\ThingsToDo.txt
'    Returned string: c:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\d$\documents\mydocument.docx
'    Returned string: d:\documents\mydocument.docx

正規表現パターンは、次の式によって定義されます。

"\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"

次の表に、正規表現パターンがどのように解釈されるかを示します。

パターン 説明
\\\\ 2つの連続する円記号 ( \ ) 文字と一致します。 バックスラッシュ文字はエスケープ文字として解釈されるため、各円記号は別の円記号でエスケープする必要があります。
+ Environment.MachineName + プロパティによって返された文字列と一致し Environment.MachineName ます。
(?:\.\w+)* ピリオド ( . ) 文字の後に1個以上の単語文字が続くパターンに一致します。 この一致は、0回以上発生する可能性があります。 一致した部分式はキャプチャされません。
\\ 円記号 () 文字と一致し \ ます。
([" + driveNames + "]) 個々のドライブ文字で構成される文字クラスと一致します。 この一致は最初にキャプチャされた部分式です。
\$ リテラルドル記号 () 文字と一致し $ ます。

置換パターンは、一致した $1 文字列全体を最初にキャプチャされた部分式と置き換えます。 つまり、UNC コンピューターとドライブ名はドライブ文字で置き換えられます。

注釈

静的 Replace メソッドは、 Regex 指定された正規表現パターンを使用してオブジェクトを構築し、インスタンスメソッドを呼び出すことと同じです Replace

パラメーターは、 pattern 一致させる文字列をシンボリックに記述する正規表現言語要素で構成されます。 正規表現の詳細については、「 .NET Framework 正規表現正規表現言語-クイックリファレンス」を参照してください。 パラメーターにを指定した場合 RightToLeft options 、一致の検索は入力文字列の末尾から開始され、左に移動します。それ以外の場合は、入力文字列の先頭から検索が開始され、右に移動します。

replacementパラメーターでは、内の各一致文字列を置き換える文字列を指定し input ます。 replacement は、リテラルテキストと 置換の任意の組み合わせで構成できます。 たとえば、置換パターンでは、 a*${test}b 文字列 "a *" の後に、キャプチャグループに一致する部分文字列 (存在する場合) と、その test 後に続く文字列 "b" が挿入されます。 * 文字は、置換パターン内では、メタ文字として認識されません。

注意

置換は、置換パターンで認識される唯一の正規表現言語要素です。 他のすべての正規表現言語要素 ( 文字エスケープを含む) は、正規表現パターンでのみ許可され、置換パターンでは認識されません。

パラメーターは、 matchTimeout パターン一致メソッドがタイムアウトする前に一致を検索する期間を指定します。タイムアウト間隔を設定すると、過度なバックトラッキングに依存している正規表現が、ほぼ一致する入力を処理するときに応答を停止することを防ぎます。 詳細については、「正規表現とバックトラッキングのベストプラクティス」を参照してください。 この期間内に一致するものが見つからない場合、メソッドは RegexMatchTimeoutException 例外をスローします。 matchTimeout メソッドを実行するアプリケーションドメインに対して定義されている既定のタイムアウト値をオーバーライドします。

一致するものがない場合、メソッドは変更なしで返されるため、メソッドを使用して、 input Object.ReferenceEquals メソッドが入力文字列に置換を行ったかどうかを判断できます。

注意 (呼び出し元)

パラメーターには、 matchTimeout 2 秒などの適切な値を設定することをお勧めします。 を指定してタイムアウトを無効にすると InfiniteMatchTimeout 、正規表現エンジンのパフォーマンスが若干向上します。 ただし、次の条件下でのみタイムアウトを無効にする必要があります。 -正規表現によって処理される入力が既知の信頼できるソースから派生した場合、または静的なテキストで構成されている場合。 これにより、ユーザーが動的に入力したテキストは除外されます。

-正規表現パターンが完全にテストされ、一致、一致しない、および近い一致を効率的に処理できるようになった場合。

-正規表現パターンに、ほぼ一致を処理するときに過度なバックトラッキングを発生させることがわかっている言語要素が含まれていない場合。

こちらもご覧ください

適用対象

Replace(String, MatchEvaluator, Int32, Int32)

指定した入力部分文字列内で正規表現パターンに一致する文字列を、指定した最大回数だけ、MatchEvaluator デリゲートによって返される文字列に置き換えます。

public:
 System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, int count, int startat);
public string Replace (string input, System.Text.RegularExpressions.MatchEvaluator evaluator, int count, int startat);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator * int * int -> string
Public Function Replace (input As String, evaluator As MatchEvaluator, count As Integer, startat As Integer) As String

パラメーター

input
String

一致する対象を検索する文字列。

evaluator
MatchEvaluator

各一致文字列を調べ、元の一致文字列または置換文字列のどちらかを返すカスタム メソッド。

count
Int32

置換を実行する最大回数。

startat
Int32

入力文字列中で検索を開始する文字位置。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 正規表現パターンが現在のインスタンスで一致しない場合、このメソッドは現在のインスタンスをそのまま返します。

例外

input または evaluatornull です。

startat が 0 未満か、input の長さを超えています。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

注釈

メソッドは、 Regex.Replace(String, MatchEvaluator, Int32, Int32) 次の条件のいずれかに該当する場合に正規表現の一致を置き換える場合に便利です。

  • 置換文字列は、正規表現の置換パターンで簡単に指定することはできません。

  • 置換文字列は、一致した文字列に対して何らかの処理が行われた結果になります。

  • 置換文字列は、条件付き処理の結果として返されます。

メソッドは、メソッドを呼び出し、 Regex.Matches(String, Int32) count Match 返されたコレクション内の最初のオブジェクトを MatchCollection デリゲートに渡す evaluator ことと同じです。

正規表現は、現在のオブジェクトのコンストラクターによって定義されたパターンです Regex

パラメーターは、定義した evaluator カスタムメソッドのデリゲートであり、それぞれの一致を調べます。 カスタムメソッドには、デリゲートに一致する次のシグネチャが必要です MatchEvaluator

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

カスタムメソッドは、一致した入力を置き換える文字列を返します。

この RegexMatchTimeoutException 例外は、置換操作の実行時間が、コンストラクターで指定されたタイムアウト時間を超えた場合にスローされ Regex.Regex(String, RegexOptions, TimeSpan) ます。 コンストラクターを呼び出すときにタイムアウト間隔を設定しなかった場合は、オブジェクトが作成されたアプリケーションドメインに対して設定されたタイムアウト値を操作が超えた場合に、例外がスローされ Regex ます。 コンストラクター呼び出しまたはアプリケーションドメインのプロパティでタイムアウトが定義されていない場合、またはタイムアウト Regex 値がの場合 Regex.InfiniteMatchTimeout 、例外はスローされません。

一致するものがない場合、メソッドは変更なしで返されるため、メソッドを使用して、 input Object.ReferenceEquals メソッドが入力文字列に置換を行ったかどうかを判断できます。

こちらもご覧ください

適用対象

Replace(String, String, MatchEvaluator, RegexOptions)

指定した入力文字列内で、指定した正規表現に一致するすべての文字列を MatchEvaluator デリゲートによって返される文字列に置き換えます。 指定したオプションで、一致操作を変更します。

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, System::Text::RegularExpressions::RegexOptions options);
public static string Replace (string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator, System.Text.RegularExpressions.RegexOptions options);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator * System.Text.RegularExpressions.RegexOptions -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator, options As RegexOptions) As String

パラメーター

input
String

一致する対象を検索する文字列。

pattern
String

一致させる正規表現パターン。

evaluator
MatchEvaluator

各一致文字列を調べ、元の一致文字列または置換文字列のどちらかを返すカスタム メソッド。

options
RegexOptions

一致オプションを指定する列挙値のビットごとの組み合わせ。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 pattern が現在のインスタンス内で一致しない場合、メソッドは現在のインスタンスを変更せずに返します。

例外

正規表現の解析エラーが発生しました。

inputpattern、または evaluatornull です。

options は、RegexOptions 値のビットごとの正しい組み合わせではありません。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、正規表現を使用して文字列から個々の単語を抽出し、デリゲートを使用して MatchEvaluator 、単語内の個々の文字をスクランブルするという名前のメソッドを呼び出し WordScramble ます。 これを行うために、メソッドは、 WordScramble 一致する文字を含む配列を作成します。 また、ランダムな浮動小数点数を設定する並列配列も作成します。 配列は、メソッドを呼び出すことによって並べ替えられ、 Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) 並べ替えられた配列はクラスコンストラクターへの引数として提供され String ます。 この新しく作成された文字列は、メソッドによって返され WordScramble ます。 正規表現パターンは、 \w+ 1 個以上の単語文字と一致します。正規表現エンジンは、空白文字など、単語以外の文字が見つかるまで、一致に文字を追加し続けます。 メソッドの呼び出しには、正規表現 Replace(String, String, MatchEvaluator, RegexOptions) RegexOptions.IgnorePatternWhitespace エンジンによって正規表現パターンのコメントが無視されるようにオプションが含まれてい \w+ # Matches all the characters in a word. ます。

using System;
using System.Collections;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string words = "letter alphabetical missing lack release " + 
                     "penchant slack acryllic laundry cease";
      string pattern = @"\w+  # Matches all the characters in a word.";                            
      MatchEvaluator evaluator = new MatchEvaluator(WordScrambler);
      Console.WriteLine("Original words:");
      Console.WriteLine(words);
      Console.WriteLine();
      Console.WriteLine("Scrambled words:");
      Console.WriteLine(Regex.Replace(words, pattern, evaluator, 
                                      RegexOptions.IgnorePatternWhitespace));      
   }

   public static string WordScrambler(Match match)
   {
      int arraySize = match.Value.Length;
      // Define two arrays equal to the number of letters in the match.
      double[] keys = new double[arraySize];
      char[] letters = new char[arraySize];
      
      // Instantiate random number generator'
      Random rnd = new Random();
      
      for (int ctr = 0; ctr < match.Value.Length; ctr++)
      {
         // Populate the array of keys with random numbers.
         keys[ctr] = rnd.NextDouble();
         // Assign letter to array of letters.
         letters[ctr] = match.Value[ctr];
      }         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default);      
      return new String(letters);
   }
}
// The example displays output similar to the following:
//    Original words:
//    letter alphabetical missing lack release penchant slack acryllic laundry cease
//    
//    Scrambled words:
//    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae
Imports System.Collections
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim words As String = "letter alphabetical missing lack release " + _
                            "penchant slack acryllic laundry cease"
      Dim pattern As String = "\w+  # Matches all the characters in a word."                            
      Dim evaluator As MatchEvaluator = AddressOf WordScrambler
      Console.WriteLine("Original words:")
      Console.WriteLine(words)
      Console.WriteLine("Scrambled words:")
      Console.WriteLine(Regex.Replace(words, pattern, evaluator,
                                      RegexOptions.IgnorePatternWhitespace))      
   End Sub
   
   Public Function WordScrambler(match As Match) As String
      Dim arraySize As Integer = match.Value.Length - 1
      ' Define two arrays equal to the number of letters in the match.
      Dim keys(arraySize) As Double
      Dim letters(arraySize) As Char
      
      ' Instantiate random number generator'
      Dim rnd As New Random()
      
      For ctr As Integer = 0 To match.Value.Length - 1
         ' Populate the array of keys with random numbers.
         keys(ctr) = rnd.NextDouble()
         ' Assign letter to array of letters.
         letters(ctr) = match.Value.Chars(ctr)
      Next         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default)      
      Return New String(letters)
   End Function
End Module
' The example displays output similar to the following:
'    Original words:
'    letter alphabetical missing lack release penchant slack acryllic laundry cease
'    
'    Scrambled words:
'    etlert liahepalbcat imsgsni alkc ereelsa epcnnaht lscak cayirllc alnyurd ecsae

注釈

Regex.Replace(String, String, MatchEvaluator, RegexOptions)次の条件のいずれかに該当する場合は、メソッドを使用して正規表現の一致を置き換えると便利です。

  • 置換文字列は、正規表現の置換パターンで簡単に指定することはできません。

  • 置換文字列は、一致した文字列に対して何らかの処理が行われた結果になります。

  • 置換文字列は、条件付き処理の結果として返されます。

メソッドは、メソッドを呼び出し、 Regex.Matches(String, String, RegexOptions) Match 返されたコレクション内の各オブジェクトを MatchCollection デリゲートに渡すことと同じです evaluator

パラメーターは、 pattern 一致させる文字列をシンボリックに記述する正規表現言語要素で構成されます。 正規表現の詳細については、「 .NET Framework 正規表現正規表現言語-クイックリファレンス」を参照してください。

パラメーターは、定義した evaluator カスタムメソッドのデリゲートであり、それぞれの一致を調べます。 カスタムメソッドには、デリゲートに一致する次のシグネチャが必要です MatchEvaluator

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

カスタムメソッドは、一致した入力を置き換える文字列を返します。

パラメーターにを指定した場合 RightToLeft options 、一致の検索は入力文字列の末尾から開始され、左に移動します。それ以外の場合は、入力文字列の先頭から検索が開始され、右に移動します。

この RegexMatchTimeoutException 例外は、置換操作の実行時間が、メソッドが呼び出されたアプリケーションドメインに指定されたタイムアウト期間を超えた場合にスローされます。 アプリケーションドメインのプロパティでタイムアウトが定義されていない場合、またはタイムアウト値がの場合は Regex.InfiniteMatchTimeout 、例外はスローされません。

一致するものがない場合、メソッドは変更なしで返されるため、メソッドを使用して、 input Object.ReferenceEquals メソッドが入力文字列に置換を行ったかどうかを判断できます。

こちらもご覧ください

適用対象

Replace(String, String, Int32, Int32)

指定した入力部分文字列内で正規表現パターンに一致する文字列を、指定した最大回数だけ、指定した置換文字列に置換します。

public:
 System::String ^ Replace(System::String ^ input, System::String ^ replacement, int count, int startat);
public string Replace (string input, string replacement, int count, int startat);
member this.Replace : string * string * int * int -> string
Public Function Replace (input As String, replacement As String, count As Integer, startat As Integer) As String

パラメーター

input
String

一致する対象を検索する文字列。

replacement
String

置換文字列。

count
Int32

置換を実行する最大回数。

startat
Int32

入力文字列中で検索を開始する文字位置。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 正規表現パターンが現在のインスタンスで一致しない場合、このメソッドは現在のインスタンスをそのまま返します。

例外

input または replacementnull です。

startat が 0 未満か、input の長さを超えています。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、文字列の最初の行を含め、すべて二重スペースを使用します。 これは、テキスト行と一致する正規表現パターン を定義し、文字列の最初の行と一致するメソッドを呼び出し、 プロパティと プロパティを使用して 2 行目の開始位置を決定します。 ^.*$ Match(String) Match.Index Match.Count

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "Instantiating a New Type\n" +
                     "Generally, there are two ways that an\n" + 
                     "instance of a class or structure can\n" +
                     "be instantiated. ";
      string pattern = "^.*$";
      string replacement = "\n$&";
      Regex rgx = new Regex(pattern, RegexOptions.Multiline);
      string result = String.Empty; 
      
      Match match = rgx.Match(input);
      // Double space all but the first line.
      if (match.Success) 
         result = rgx.Replace(input, replacement, -1, match.Index + match.Length + 1);

      Console.WriteLine(result);                     
   }
}
// The example displays the following output:
//       Instantiating a New Type
//       
//       Generally, there are two ways that an
//       
//       instance of a class or structure can
//       
//       be instntiated.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "Instantiating a New Type" + vbCrLf + _
                            "Generally, there are two ways that an" + vbCrLf + _
                            "instance of a class or structure can" + vbCrLf + _
                            "be instantiated. "
      Dim pattern As String = "^.*$"
      Dim replacement As String = vbCrLf + "$&"
      Dim rgx As New Regex(pattern, RegexOptions.Multiline)
      Dim result As String = String.Empty 
      
      Dim match As Match = rgx.Match(input)
      ' Double space all but the first line.
      If match.Success Then 
         result = rgx.Replace(input, replacement, -1, match.Index + match.Length + 1)
      End If
      Console.WriteLine(result)                      
   End Sub
End Module
' The example displays the following output:
'       Instantiating a New Type
'       
'       Generally, there are two ways that an
'       
'       instance of a class or structure can
'       
'       be instntiated.

正規表現パターン ^.*$ は、次の表に示すように定義されています。

パターン 説明
^ 行の先頭に一致します。 (オブジェクトはオプションを使用してインスタンス化されていることに注意してください。 Regex RegexOptions.Multiline それ以外の場合、この文字クラスは入力文字列の先頭にのみ一致します)。
.* 0 回以上の任意の文字に一致します。
$ 行の末尾と一致します。 (オブジェクトはオプションを使用してインスタンス化されていることに注意してください。 Regex RegexOptions.Multiline それ以外の場合、この文字クラスは入力文字列の先頭にのみ一致します)。

置換文字列 ( vbCrLf + "$&" C# の Visual Basic では) は、 "\n$&" 一致する文字列の前に新しい行を追加します。 C# の \n 例では、C# コンパイラによって改行文字として解釈されることに注意してください。これは、正規表現文字エスケープを表しません。

注釈

一致の検索は、 パラメーターで input 指定された位置にある文字列から始 startat まります。 正規表現は、現在のオブジェクトのコンストラクターによって定義されるパターン Regex です。 が count 負の場合、置換は文字列の末尾に続きます。 が count 一致の数を超えると、すべての一致が置き換えられる。

パラメーター replacement は、 の各一致を置き換える文字列を指定します inputreplacement は、リテラル テキストと置換の任意の組み合わせ で構成できます。 たとえば、置換パターンでは、文字列 "a*" の後に、キャプチャ グループによって一致する部分文字列 (指定されている場合) が挿入され、その後に a*${test}b test 文字列 "b" が続きます。 * 文字は、置換パターン内ではメタ文字として認識されません。

注意

置換は、置換パターンで認識される唯一の正規表現言語要素です。 文字エスケープを含む他のすべての正規表現言語要素は、正規表現パターンでのみ許可され、置換パターンでは認識されません。

置換操作の実行時間が、コンストラクターによって指定されたタイム アウト間隔を超えた場合、 RegexMatchTimeoutException 例外がスロー Regex.Regex(String, RegexOptions, TimeSpan) されます。 コンストラクターの呼び出し時にタイム アウト間隔を設定しない場合、オブジェクトが作成されるアプリケーション ドメインに対して確立された任意のタイム アウト値を操作が超えた場合、例外がスロー Regex されます。 コンストラクター呼び出しまたはアプリケーション ドメインのプロパティでタイム アウトが定義されていない場合、またはタイム アウト値が の場合、 Regex Regex.InfiniteMatchTimeout 例外はスローされません。

一致がない場合、メソッドは変更されずに返すので、 メソッドを使用して、メソッドが入力文字列の置換を行った input Object.ReferenceEquals かどうかを判断できます。

こちらもご覧ください

適用対象

Replace(String, String, String, RegexOptions)

指定した入力文字列内で指定した正規表現に一致するすべての文字列を、指定した置換文字列に置換します。 指定したオプションで、一致操作を変更します。

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement, System::Text::RegularExpressions::RegexOptions options);
public static string Replace (string input, string pattern, string replacement, System.Text.RegularExpressions.RegexOptions options);
static member Replace : string * string * string * System.Text.RegularExpressions.RegexOptions -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String, options As RegexOptions) As String

パラメーター

input
String

一致する対象を検索する文字列。

pattern
String

一致させる正規表現パターン。

replacement
String

置換文字列。

options
RegexOptions

一致オプションを指定する列挙値のビットごとの組み合わせ。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 pattern が現在のインスタンス内で一致しない場合、メソッドは現在のインスタンスを変更せずに返します。

例外

正規表現の解析エラーが発生しました。

inputpattern、または replacementnull です。

options は、RegexOptions 値のビットごとの正しい組み合わせではありません。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、メソッドを使用して、 Replace(String, String, String, RegexOptions) UNC パスのローカルコンピューターとドライブ名をローカルファイルパスに置き換えます。 この正規表現では、プロパティを使用して Environment.MachineName ローカルコンピューターの名前を指定し、 Environment.GetLogicalDrives メソッドに論理ドライブの名前を含めます。 すべての正規表現文字列比較では、大文字と小文字は区別されません。 例を正しく実行するには、リテラル文字列 "MyMachine" をローカルコンピューター名に置き換える必要があります。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      // Get drives available on local computer and form into a single character expression.
      string[] drives = Environment.GetLogicalDrives();
      string driveNames = String.Empty;
      foreach (string drive in drives)
         driveNames += drive.Substring(0,1);
      // Create regular expression pattern dynamically based on local machine information.
      string pattern = @"\\\\" + Environment.MachineName + @"(?:\.\w+)*\\([" + driveNames + @"])\$";

      string replacement = "$1:";
      string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", 
                            @"\\MyMachine\c$\ThingsToDo.txt", 
                            @"\\MyMachine\d$\documents\mydocument.docx" }; 
      
      foreach (string uncPath in uncPaths)
      {
         Console.WriteLine("Input string: " + uncPath);
         Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement, RegexOptions.IgnoreCase));
         Console.WriteLine();
      }
   }
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
//    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
//    Returned string: C:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\c$\ThingsToDo.txt
//    Returned string: c:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\d$\documents\mydocument.docx
//    Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      ' Get drives available on local computer and form into a single character expression.
      Dim drives() As String = Environment.GetLogicalDrives()
      Dim driveNames As String = Nothing
      For Each drive As String In drives
         driveNames += drive.Substring(0,1)
      Next
      ' Create regular expression pattern dynamically based on local machine information.
      Dim pattern As String = "\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"

      Dim replacement As String = "$1:"
      Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
                                  "\\MyMachine\c$\ThingsToDo.txt", _
                                  "\\MyMachine\d$\documents\mydocument.docx" } 
      
      For Each uncPath As String In uncPaths
         Console.WriteLine("Input string: " + uncPath)
         Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement, RegexOptions.IgnoreCase))
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
'    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
'    Returned string: C:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\c$\ThingsToDo.txt
'    Returned string: c:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\d$\documents\mydocument.docx
'    Returned string: d:\documents\mydocument.docx

正規表現パターンは、次の式によって定義されます。

"\\\\" + Environment.MachineName + "(?:\.\w+)*\\([" + driveNames + "])\$"

次の表に、正規表現パターンがどのように解釈されるかを示します。

パターン 説明
\\\\ 2つの連続する円記号 ( \ ) 文字と一致します。 バックスラッシュ文字はエスケープ文字として解釈されるため、各円記号は別の円記号でエスケープする必要があります。
+ Environment.MachineName + プロパティによって返された文字列と一致し Environment.MachineName ます。
(?:\.\w+)* ピリオド ( . ) 文字の後に1個以上の単語文字が続くパターンに一致します。 この一致は、0回以上発生する可能性があります。 一致した部分式はキャプチャされません。
\\ 円記号 () 文字と一致し \ ます。
([" + driveNames + "]) 個々のドライブ文字で構成される文字クラスと一致します。 この一致は最初にキャプチャされた部分式です。
\$ リテラルドル記号 () 文字と一致し $ ます。

置換パターンは、一致した $1 文字列全体を最初にキャプチャされた部分式と置き換えます。 つまり、UNC コンピューターとドライブ名はドライブ文字で置き換えられます。

注釈

静的 Replace メソッドは、 Regex 指定された正規表現パターンを使用してオブジェクトを構築し、インスタンスメソッドを呼び出すことと同じです Replace

パラメーターは、 pattern 一致させる文字列をシンボリックに記述する正規表現言語要素で構成されます。 正規表現の詳細については、「 .NET Framework 正規表現正規表現言語-クイックリファレンス」を参照してください。 パラメーターにを指定した場合 RightToLeft options 、一致の検索は入力文字列の末尾から開始され、左に移動します。それ以外の場合は、入力文字列の先頭から検索が開始され、右に移動します。

replacementパラメーターでは、内の各一致文字列を置き換える文字列を指定し input ます。 replacement は、リテラルテキストと 置換の任意の組み合わせで構成できます。 たとえば、置換パターンでは、 a*${test}b 文字列 "a *" の後に、キャプチャグループに一致する部分文字列 (存在する場合) と、その test 後に続く文字列 "b" が挿入されます。 * 文字は、置換パターン内では、メタ文字として認識されません。

注意

置換は、置換パターンで認識される唯一の正規表現言語要素です。 他のすべての正規表現言語要素 ( 文字エスケープを含む) は、正規表現パターンでのみ許可され、置換パターンでは認識されません。

この RegexMatchTimeoutException 例外は、置換操作の実行時間が、メソッドが呼び出されたアプリケーションドメインに指定されたタイムアウト期間を超えた場合にスローされます。 アプリケーションドメインのプロパティでタイムアウトが定義されていない場合、またはタイムアウト値がの場合は Regex.InfiniteMatchTimeout 、例外はスローされません。

一致するものがない場合、メソッドは変更なしで返されるため、メソッドを使用して、 input Object.ReferenceEquals メソッドが入力文字列に置換を行ったかどうかを判断できます。

注意 (呼び出し元)

このメソッドは、呼び出されたアプリケーションドメインの既定のタイムアウト値と同じ間隔の後にタイムアウトします。 タイムアウト値がアプリケーションドメインに対して定義されていない場合は、メソッドがタイムアウトしないようにする値が InfiniteMatchTimeout 使用されます。 パターンマッチを置き換えるために推奨される静的メソッドはです Replace(String, String, String, RegexOptions, TimeSpan) 。これにより、タイムアウト間隔を設定できます。

こちらもご覧ください

適用対象

Replace(String, String, MatchEvaluator)

指定した入力文字列内で、指定した正規表現に一致するすべての文字列を MatchEvaluator デリゲートによって返される文字列に置き換えます。

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::MatchEvaluator ^ evaluator);
public static string Replace (string input, string pattern, System.Text.RegularExpressions.MatchEvaluator evaluator);
static member Replace : string * string * System.Text.RegularExpressions.MatchEvaluator -> string
Public Shared Function Replace (input As String, pattern As String, evaluator As MatchEvaluator) As String

パラメーター

input
String

一致する対象を検索する文字列。

pattern
String

一致させる正規表現パターン。

evaluator
MatchEvaluator

各一致文字列を調べ、元の一致文字列または置換文字列のどちらかを返すカスタム メソッド。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 pattern が現在のインスタンス内で一致しない場合、メソッドは現在のインスタンスを変更せずに返します。

例外

正規表現の解析エラーが発生しました。

inputpattern、または evaluatornull です。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、正規表現を使用して文字列から個々の単語を抽出し、デリゲートを使用して、 という名前のメソッドを呼び出し、単語内の個々の文字をスクレイブル MatchEvaluator WordScramble します。 これを行うには、 WordScramble メソッドによって、一致する文字を含む配列が作成されます。 また、ランダム浮動小数点数を設定する並列配列も作成されます。 配列は メソッドを呼び出して並べ替え、並べ替えた配列はクラス コンストラクターの Array.Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>) 引数として String 提供されます。 この新しく作成された文字列は、 メソッドによって返 WordScramble されます。 正規表現パターンは、1 つ以上の単語文字と一致します。正規表現エンジンは、空白文字などの単語以外の文字が検出されるまで、引き続き一致に文字を追加します \w+

using System;
using System.Collections;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string words = "letter alphabetical missing lack release " + 
                     "penchant slack acryllic laundry cease";
      string pattern = @"\w+";                            
      MatchEvaluator evaluator = new MatchEvaluator(WordScrambler);
      Console.WriteLine("Original words:");
      Console.WriteLine(words);
      Console.WriteLine();
      Console.WriteLine("Scrambled words:");
      Console.WriteLine(Regex.Replace(words, pattern, evaluator));      
   }

   public static string WordScrambler(Match match)
   {
      int arraySize = match.Value.Length;
      // Define two arrays equal to the number of letters in the match.
      double[] keys = new double[arraySize];
      char[] letters = new char[arraySize];
      
      // Instantiate random number generator'
      Random rnd = new Random();
      
      for (int ctr = 0; ctr < match.Value.Length; ctr++)
      {
         // Populate the array of keys with random numbers.
         keys[ctr] = rnd.NextDouble();
         // Assign letter to array of letters.
         letters[ctr] = match.Value[ctr];
      }         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default);      
      return new String(letters);
   }
}
// The example displays output similar to the following:
//    Original words:
//    letter alphabetical missing lack release penchant slack acryllic laundry cease
//    
//    Scrambled words:
//    elrtte iaeabatlpchl igmnssi lcka aerslee hnpatnce ksacl lialcryc dylruna ecase
Imports System.Collections
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim words As String = "letter alphabetical missing lack release " + _
                            "penchant slack acryllic laundry cease"
      Dim pattern As String = "\w+"                            
      Dim evaluator As MatchEvaluator = AddressOf WordScrambler
      Console.WriteLine("Original words:")
      Console.WriteLine(words)
      Console.WriteLine("Scrambled words:")
      Console.WriteLine(Regex.Replace(words, pattern, evaluator))      
   End Sub
   
   Public Function WordScrambler(match As Match) As String
      Dim arraySize As Integer = match.Value.Length - 1
      ' Define two arrays equal to the number of letters in the match.
      Dim keys(arraySize) As Double
      Dim letters(arraySize) As Char
      
      ' Instantiate random number generator'
      Dim rnd As New Random()
      
      For ctr As Integer = 0 To match.Value.Length - 1
         ' Populate the array of keys with random numbers.
         keys(ctr) = rnd.NextDouble()
         ' Assign letter to array of letters.
         letters(ctr) = match.Value.Chars(ctr)
      Next         
      Array.Sort(keys, letters, 0, arraySize, Comparer.Default)      
      Return New String(letters)
   End Function
End Module
' The example displays output similar to the following:
'    Original words:
'    letter alphabetical missing lack release penchant slack acryllic laundry cease
'    
'    Scrambled words:
'    elrtte iaeabatlpchl igmnssi lcka aerslee hnpatnce ksacl lialcryc dylruna ecase

注釈

メソッド Regex.Replace(String, String, MatchEvaluator) は、次の条件に当てはまる場合に正規表現の一致を置き換える場合に便利です。

  • 置換文字列は、正規表現の置換パターンでは簡単に指定できません。

  • 置換文字列は、一致した文字列に対して何らかの処理が行われた結果として得られます。

  • 置換文字列は、条件付き処理の結果です。

メソッドは、 メソッドを呼び出し、返されたコレクション内の各オブジェクトを Regex.Matches(String, String) Match MatchCollection デリゲートに渡すのと同 evaluator じです。

パラメーター pattern は、一致する文字列をシンボル的に記述する正規表現言語要素で構成されます。 正規表現の詳細については、「正規表現と正規表現.NET Frameworkクイック リファレンス」を参照してください

パラメーター evaluator は、定義し、各一致を調べるカスタム メソッドのデリゲートです。 カスタム メソッドには、デリゲートと一致する次のシグネチャが必要 MatchEvaluator です。

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

カスタム メソッドは、一致した入力を置き換える文字列を返します。

置換操作の実行時間が、メソッドが呼び出されるアプリケーション ドメインに指定されたタイム アウト間隔を超えた場合、例外 RegexMatchTimeoutException がスローされます。 アプリケーション ドメインのプロパティでタイム アウトが定義されていない場合、または、そのタイム アウト値が の場合、 Regex.InfiniteMatchTimeout 例外はスローされません。

一致がない場合、メソッドは変更されずに返すので、 メソッドを使用して、メソッドが入力文字列の置換を行った input Object.ReferenceEquals かどうかを判断できます。

注意 (呼び出し元)

このメソッドは、呼び出されたアプリケーション ドメインの既定のタイム アウト値と等しい間隔の後に、タイム アウトします。 アプリケーション ドメインに対してタイム アウト値が定義されていない場合は、メソッドのタイミングを妨げる値 である InfiniteMatchTimeout が使用されます。 パターンの一致を評価および置換するための推奨される静的メソッドは です。これにより、タイム アウト間隔 Replace(String, String, MatchEvaluator, RegexOptions, TimeSpan) を設定できます。

こちらもご覧ください

適用対象

Replace(String, String, String)

指定した入力文字列内で指定した正規表現に一致するすべての文字列を、指定した置換文字列に置換します。

public:
 static System::String ^ Replace(System::String ^ input, System::String ^ pattern, System::String ^ replacement);
public static string Replace (string input, string pattern, string replacement);
static member Replace : string * string * string -> string
Public Shared Function Replace (input As String, pattern As String, replacement As String) As String

パラメーター

input
String

一致する対象を検索する文字列。

pattern
String

一致させる正規表現パターン。

replacement
String

置換文字列。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 pattern が現在のインスタンス内で一致しない場合、メソッドは現在のインスタンスを変更せずに返します。

例外

正規表現の解析エラーが発生しました。

inputpattern、または replacementnull です。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、1つ以上の空白文字に一致する正規表現を定義して \s+ います。 置換文字列 "" は、1つの空白文字で置き換えられます。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "This is   text with   far  too   much   " + 
                     "white space.";
      string pattern = "\\s+";
      string replacement = " ";
      string result = Regex.Replace(input, pattern, replacement);
      
      Console.WriteLine("Original String: {0}", input);
      Console.WriteLine("Replacement String: {0}", result);                             
   }
}
// The example displays the following output:
//       Original String: This is   text with   far  too   much   white space.
//       Replacement String: This is text with far too much white space.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "This is   text with   far  too   much   " + _
                            "white space."
      Dim pattern As String = "\s+"
      Dim replacement As String = " "
      Dim result As String = Regex.Replace(input, pattern, replacement)
      
      Console.WriteLine("Original String: {0}", input)
      Console.WriteLine("Replacement String: {0}", result)                             
   End Sub
End Module
' The example displays the following output:
'          Original String: This is   text with   far  too   much   white space.
'          Replacement String: This is text with far too much white space.

次の例では、メソッドを使用して、 Replace(String, String, String) UNC パスのローカルコンピューターとドライブ名をローカルファイルパスに置き換えます。 この正規表現では、プロパティを使用して Environment.MachineName ローカルコンピューターの名前を指定し、 Environment.GetLogicalDrives メソッドに論理ドライブの名前を含めます。 例を正しく実行するには、リテラル文字列 "MyMachine" をローカルコンピューター名に置き換える必要があります。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      // Get drives available on local computer and form into a single character expression.
      string[] drives = Environment.GetLogicalDrives();
      string driveNames = String.Empty;
      foreach (string drive in drives)
         driveNames += drive.Substring(0,1);
      // Create regular expression pattern dynamically based on local machine information.
      string pattern = @"\\\\(?i:" + Environment.MachineName + @")(?:\.\w+)*\\((?i:[" + driveNames + @"]))\$";

      string replacement = "$1:";
      string[] uncPaths = { @"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", 
                            @"\\MyMachine\c$\ThingsToDo.txt", 
                            @"\\MyMachine\d$\documents\mydocument.docx" }; 
      
      foreach (string uncPath in uncPaths)
      {
         Console.WriteLine("Input string: " + uncPath);
         Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement));
         Console.WriteLine();
      }
   }
}
// The example displays the following output if run on a machine whose name is
// MyMachine:
//    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
//    Returned string: C:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\c$\ThingsToDo.txt
//    Returned string: c:\ThingsToDo.txt
//    
//    Input string: \\MyMachine\d$\documents\mydocument.docx
//    Returned string: d:\documents\mydocument.docx
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      ' Get drives available on local computer and form into a single character expression.
      Dim drives() As String = Environment.GetLogicalDrives()
      Dim driveNames As String = Nothing
      For Each drive As String In drives
         driveNames += drive.Substring(0,1)
      Next
      ' Create regular expression pattern dynamically based on local machine information.
      Dim pattern As String = "\\\\(?i:" + Environment.MachineName + ")(?:\.\w+)*\\((?i:[" + driveNames + "]))\$"

      Dim replacement As String = "$1:"
      Dim uncPaths() AS String = {"\\MyMachine.domain1.mycompany.com\C$\ThingsToDo.txt", _
                                  "\\MyMachine\c$\ThingsToDo.txt", _
                                  "\\MyMachine\d$\documents\mydocument.docx" } 
      
      For Each uncPath As String In uncPaths
         Console.WriteLine("Input string: " + uncPath)
         Console.WriteLine("Returned string: " + Regex.Replace(uncPath, pattern, replacement))
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output if run on a machine whose name is
' MyMachine:
'    Input string: \\MyMachine.domain1.mycompany.com\C$\ThingsToTo.txt
'    Returned string: C:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\c$\ThingsToDo.txt
'    Returned string: c:\ThingsToDo.txt
'    
'    Input string: \\MyMachine\d$\documents\mydocument.docx
'    Returned string: d:\documents\mydocument.docx

正規表現パターンは、次の式によって定義されます。

"\\\\(?i:" + Environment.MachineName + ")(?:\.\w+)*\\((?i:[" + driveNames + "]))\$"

次の表に、正規表現パターンがどのように解釈されるかを示します。

パターン 説明
\\\\ 2つの連続する円記号 ( \ ) 文字と一致します。 バックスラッシュ文字はエスケープ文字として解釈されるため、各円記号は別の円記号でエスケープする必要があります。
(?i:" + Environment.MachineName + ") プロパティによって返される文字列の大文字と小文字を区別しない一致を実行し Environment.MachineName ます。
(?:\.\w+)* ピリオド ( . ) 文字の後に1個以上の単語文字が続くパターンに一致します。 この一致は、0回以上発生する可能性があります。 一致した部分式はキャプチャされません。
\\ 円記号 () 文字と一致し \ ます。
((?i:[" + driveNames + "])) 個々のドライブ文字で構成される文字クラスの大文字と小文字を区別しない一致を実行します。 この一致は最初にキャプチャされた部分式です。
\$ リテラルドル記号 () 文字と一致し $ ます。

置換パターンは、一致した $1 文字列全体を最初にキャプチャされた部分式と置き換えます。 つまり、UNC コンピューターとドライブ名はドライブ文字で置き換えられます。

注釈

静的 Replace メソッドは、 Regex 指定された正規表現パターンを使用してオブジェクトを構築し、インスタンスメソッドを呼び出すことと同じです Replace

パラメーターは、 pattern 一致させる文字列をシンボリックに記述する正規表現言語要素で構成されます。 正規表現の詳細については、「 .NET Framework 正規表現正規表現言語-クイックリファレンス」を参照してください。 一致の検索は、文字列の先頭から開始され input ます。

replacementパラメーターでは、内の各一致文字列を置き換える文字列を指定し input ます。 replacement は、リテラルテキストと 置換の任意の組み合わせで構成できます。 たとえば、置換パターンでは、 a*${test}b 文字列 "a *" の後に、キャプチャグループに一致する部分文字列 (存在する場合) と、その test 後に続く文字列 "b" が挿入されます。 * 文字は、置換パターン内では、メタ文字として認識されません。

注意

置換は、置換パターンで認識される唯一の正規表現言語要素です。 他のすべての正規表現言語要素 ( 文字エスケープを含む) は、正規表現パターンでのみ許可され、置換パターンでは認識されません。

この RegexMatchTimeoutException 例外は、置換操作の実行時間が、メソッドが呼び出されたアプリケーションドメインに指定されたタイムアウト期間を超えた場合にスローされます。 アプリケーションドメインのプロパティでタイムアウトが定義されていない場合、またはタイムアウト値がの場合は Regex.InfiniteMatchTimeout 、例外はスローされません。

一致するものがない場合、メソッドは変更なしで返されるため、メソッドを使用して、 input Object.ReferenceEquals メソッドが入力文字列に置換を行ったかどうかを判断できます。

注意 (呼び出し元)

このメソッドは、呼び出されたアプリケーション ドメインの既定のタイム アウト値と等しい間隔の後に、タイム アウトします。 アプリケーション ドメインに対してタイム アウト値が定義されていない場合は、メソッドのタイミングを妨げる値 である InfiniteMatchTimeout が使用されます。 パターンの一致を置き換える静的メソッドとして推奨される は です。これにより、タイム アウト間隔 Replace(String, String, String, RegexOptions, TimeSpan) を設定できます。

こちらもご覧ください

適用対象

Replace(String, String, Int32)

指定した入力文字列内で正規表現パターンに一致する文字列を、指定した最大回数だけ、指定した置換文字列に置換します。

public:
 System::String ^ Replace(System::String ^ input, System::String ^ replacement, int count);
public string Replace (string input, string replacement, int count);
member this.Replace : string * string * int -> string
Public Function Replace (input As String, replacement As String, count As Integer) As String

パラメーター

input
String

一致する対象を検索する文字列。

replacement
String

置換文字列。

count
Int32

置換を行う最大回数。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 正規表現パターンが現在のインスタンスで一致しない場合、このメソッドは現在のインスタンスをそのまま返します。

例外

input または replacementnull です。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、最初の5回の重複する文字を1つの文字に置き換えます。 正規表現パターンは、 (\w)\1 1 つの文字を連続して検索し、最初の出現箇所を最初のキャプチャグループに代入します。 置換パターンは、一致した $1 文字列全体を最初のキャプチャグループに置き換えます。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string str = "aabccdeefgghiijkklmm";
      string pattern = "(\\w)\\1"; 
      string replacement = "$1"; 
      Regex rgx = new Regex(pattern);

      string result = rgx.Replace(str, replacement, 5);
      Console.WriteLine("Original String:    '{0}'", str);
      Console.WriteLine("Replacement String: '{0}'", result); 
   }
}
// The example displays the following output:
//       Original String:    'aabccdeefgghiijkklmm'
//       Replacement String: 'abcdefghijkklmm'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim str As String = "aabccdeefgghiijkklmm"
      Dim pattern As String = "(\w)\1" 
      Dim replacement As String = "$1" 
      Dim rgx As New Regex(pattern)

      Dim result As String = rgx.Replace(str, replacement, 5)
      Console.WriteLine("Original String:    '{0}'", str)
      Console.WriteLine("Replacement String: '{0}'", result)                             
   End Sub
End Module
' The example displays the following output:
'       Original String:    'aabccdeefgghiijkklmm'
'       Replacement String: 'abcdefghijkklmm'

注釈

一致の検索は、文字列の先頭から開始され input ます。 正規表現は、現在のオブジェクトのコンストラクターによって定義されるパターンです Regexcountが負の値の場合、置換は文字列の末尾に続きます。 が count 一致の数を超えた場合は、すべての一致が置換されます。

パラメーターは、 replacement の最初の一致を置き換える文字列を指定し count input ます。 replacement は、リテラルテキストと 置換の任意の組み合わせで構成できます。 たとえば、置換パターンでは、 a*${test}b 文字列 "a *" の後に、キャプチャグループに一致する部分文字列 (存在する場合) と、その test 後に続く文字列 "b" が挿入されます。 * 文字は、置換パターン内では、メタ文字として認識されません。

注意

置換は、置換パターンで認識される唯一の正規表現言語要素です。 他のすべての正規表現言語要素 ( 文字エスケープを含む) は、正規表現パターンでのみ許可され、置換パターンでは認識されません。

この RegexMatchTimeoutException 例外は、置換操作の実行時間が、コンストラクターで指定されたタイムアウト時間を超えた場合にスローされ Regex.Regex(String, RegexOptions, TimeSpan) ます。 コンストラクターを呼び出すときにタイムアウト間隔を設定しなかった場合は、オブジェクトが作成されたアプリケーションドメインに対して設定されたタイムアウト値を操作が超えた場合に、例外がスローされ Regex ます。 コンストラクター呼び出しまたはアプリケーションドメインのプロパティでタイムアウトが定義されていない場合、またはタイムアウト Regex 値がの場合 Regex.InfiniteMatchTimeout 、例外はスローされません。

一致するものがない場合、メソッドは変更なしで返されるため、メソッドを使用して、 input Object.ReferenceEquals メソッドが入力文字列に置換を行ったかどうかを判断できます。

こちらもご覧ください

適用対象

Replace(String, MatchEvaluator)

指定した入力文字列内で、指定した正規表現に一致するすべての文字列を MatchEvaluator デリゲートによって返される文字列に置き換えます。

public:
 System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator);
public string Replace (string input, System.Text.RegularExpressions.MatchEvaluator evaluator);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator -> string
Public Function Replace (input As String, evaluator As MatchEvaluator) As String

パラメーター

input
String

一致する対象を検索する文字列。

evaluator
MatchEvaluator

各一致文字列を調べ、元の一致文字列または置換文字列のどちらかを返すカスタム メソッド。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 正規表現パターンが現在のインスタンスで一致しない場合、このメソッドは現在のインスタンスをそのまま返します。

例外

input または evaluatornull です。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次のコード例では、元の文字列を表示し、元の文字列の各単語と一致し、各一致の最初の文字を大文字に変換して、変換後の文字列を表示します。

using System;
using System.Text.RegularExpressions;

class RegExSample
{
    static string CapText(Match m)
    {
        // Get the matched string.
        string x = m.ToString();
        // If the first char is lower case...
        if (char.IsLower(x[0]))
        {
            // Capitalize it.
            return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
        }
        return x;
    }

    static void Main()
    {
        string text = "four score and seven years ago";

        Console.WriteLine($"text=[{text}]");

        Regex rx = new Regex(@"\w+");

        string result = rx.Replace(text, new MatchEvaluator(RegExSample.CapText));

        Console.WriteLine($"result=[{result}]");
    }
}
// The example displays the following output:
//       text=[four score and seven years ago]
//       result=[Four Score And Seven Years Ago]
Imports System.Text.RegularExpressions

Module RegExSample
    Function CapText(ByVal m As Match) As String
        ' Get the matched string.
        Dim x As String = m.ToString()
        ' If the first char is lower case...
        If Char.IsLower(x.Chars(0)) Then
            ' Capitalize it.
            Return Char.ToUpper(x.Chars(0)) & x.Substring(1, x.Length - 1)
        End If
        Return x
    End Function

    Sub Main()
        Dim text As String = "four score and seven years ago"

        Console.WriteLine($"text=[{text}]")

        Dim rx As New Regex("\w+")

        Dim result As String = rx.Replace(text, AddressOf RegExSample.CapText)

        Console.WriteLine($"result=[{result}]")
    End Sub
End Module
' The example displays the following output:
'       text=[four score and seven years ago]
'       result=[Four Score And Seven Years Ago]

注釈

メソッドは、 Regex.Replace(String, MatchEvaluator) 次の条件のいずれかに該当する場合に正規表現の一致を置き換える場合に便利です。

  • 置換文字列は、正規表現の置換パターンで簡単に指定することはできません。

  • 置換文字列は、一致した文字列に対して何らかの処理が行われた結果になります。

  • 置換文字列は、条件付き処理の結果として返されます。

メソッドは、メソッドを呼び出し、 Regex.Matches(String) Match 返されたコレクション内の各オブジェクトを MatchCollection デリゲートに渡すことと同じです evaluator

正規表現は、現在のオブジェクトのコンストラクターによって定義されたパターンです Regex

パラメーターは、定義した evaluator カスタムメソッドのデリゲートであり、それぞれの一致を調べます。 カスタムメソッドには、デリゲートに一致する次のシグネチャが必要です MatchEvaluator

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

カスタムメソッドは、一致した入力を置き換える文字列を返します。

この RegexMatchTimeoutException 例外は、置換操作の実行時間が、コンストラクターで指定されたタイムアウト時間を超えた場合にスローされ Regex.Regex(String, RegexOptions, TimeSpan) ます。 コンストラクターを呼び出すときにタイムアウト間隔を設定しなかった場合は、オブジェクトが作成されたアプリケーションドメインに対して設定されたタイムアウト値を操作が超えた場合に、例外がスローされ Regex ます。 コンストラクター呼び出しまたはアプリケーションドメインのプロパティでタイムアウトが定義されていない場合、またはタイムアウト Regex 値がの場合 Regex.InfiniteMatchTimeout 、例外はスローされません。

一致するものがない場合、メソッドは変更なしで返されるため、メソッドを使用して、 input Object.ReferenceEquals メソッドが入力文字列に置換を行ったかどうかを判断できます。

こちらもご覧ください

適用対象

Replace(String, String)

指定した入力文字列内で正規表現パターンに一致するすべての文字列を、指定した置換文字列に置換します。

public:
 System::String ^ Replace(System::String ^ input, System::String ^ replacement);
public string Replace (string input, string replacement);
member this.Replace : string * string -> string
Public Function Replace (input As String, replacement As String) As String

パラメーター

input
String

一致する対象を検索する文字列。

replacement
String

置換文字列。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 正規表現パターンが現在のインスタンスで一致しない場合、このメソッドは現在のインスタンスをそのまま返します。

例外

input または replacementnull です。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、1つ以上の空白文字に一致する正規表現を定義して \s+ います。 置換文字列 "" は、1つの空白文字で置き換えられます。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "This is   text with   far  too   much   " + 
                     "white space.";
      string pattern = "\\s+";
      string replacement = " ";
      Regex rgx = new Regex(pattern);
      string result = rgx.Replace(input, replacement);
      
      Console.WriteLine("Original String: {0}", input);
      Console.WriteLine("Replacement String: {0}", result);                             
   }
}
// The example displays the following output:
//       Original String: This is   text with   far  too   much   white space.
//       Replacement String: This is text with far too much white space.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "This is   text with   far  too   much   " + _
                            "white space."
      Dim pattern As String = "\s+"
      Dim replacement As String = " "
      Dim rgx As New Regex(pattern)
      Dim result As String = rgx.Replace(input, replacement)
      
      Console.WriteLine("Original String: {0}", input)
      Console.WriteLine("Replacement String: {0}", result)                             
   End Sub
End Module
' The example displays the following output:
'          Original String: This is   text with   far  too   much   white space.
'          Replacement String: This is text with far too much white space.

次の例では、正規表現 (\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})? と、 $2 数値から先頭または末尾の通貨記号を削除する置換パターンを定義しています。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern =  @"(\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?";
      string input = "$17.43  €2 16.33  £0.98  0.43   £43   12€  17";
      string replacement = "$2";
      Regex rgx = new Regex(pattern);
      string result = rgx.Replace(input, replacement);

      Console.WriteLine("Original String:    '{0}'", input);
      Console.WriteLine("Replacement String: '{0}'", result);                             
   }
}
// The example displays the following output:
//       Original String:    '$17.43  €2 16.33  £0.98  0.43   £43   12€  17'
//       Replacement String: '17.43  2 16.33  0.98  0.43   43   12  17'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String =  "(\p{Sc}\s?)?(\d+\.?((?<=\.)\d+)?)(?(1)|\s?\p{Sc})?"
      Dim input As String = "$17.43  €2 16.33  £0.98  0.43   £43   12€  17"
      Dim replacement As String = "$2"
      Dim rgx As New Regex(pattern)
      Dim result As String = rgx.Replace(input, replacement)

      Console.WriteLine("Original String:    '{0}'", input)
      Console.WriteLine("Replacement String: '{0}'", result)                             
   End Sub
End Module
' The example displays the following output:
'       Original String:    '$17.43  €2 16.33  £0.98  0.43   £43   12€  17'
'       Replacement String: '17.43  2 16.33  0.98  0.43   43   12  17'

この正規表現の解釈を次の表に示します。

Pattern 説明
\p{Sc} 通貨記号に一致します。 {Sc} Unicode 記号、通貨カテゴリのメンバーである任意の文字を示します。
\s? 0 個または 1 個の空白文字と一致します。
(\p{Sc}\s?)? 通貨記号の後に0個または1個の空白文字が続く組み合わせの0回または1回の繰り返しに一致します。 これが最初のキャプチャ グループです。
\d+ 1 個以上の 10 進数と一致します。
\.? ピリオドの0回または1回の繰り返しに一致します (小数点区切り文字として使用されます)。
((?<=\.)\d+)? ピリオドが前の文字の場合は、1桁以上の10進数と一致します。 このパターンは、0回または1回一致することができます。
(\d+\.?((?<=\.)\d+)?) 1個以上の10進数の後に省略可能なピリオドと追加の10進数が続くパターンと一致します。 これが 2 番目のキャプチャ グループです。 メソッドを呼び出すと、一致した Replace(String, String) 全体がこのキャプチャされたグループの値に置き換えられます。
(?(1)|\s?\p{Sc})? 最初のキャプチャグループが存在する場合は、空の文字列と一致します。 それ以外の場合は、0個または1個の空白文字の後に通貨記号が続くパターンに一致します。

注釈

一致の検索は、文字列の先頭から開始され input ます。 正規表現は、現在のオブジェクトのコンストラクターによって定義されたパターンです Regex

replacementパラメーターでは、内の各一致文字列を置き換える文字列を指定し input ます。 replacement は、リテラルテキストと 置換の任意の組み合わせで構成できます。 たとえば、置換パターンでは、 a*${test}b 文字列 "a *" の後に、キャプチャグループに一致する部分文字列 (存在する場合) と、その test 後に続く文字列 "b" が挿入されます。 * 文字は、置換パターン内では、メタ文字として認識されません。

注意

置換は、置換パターンで認識される唯一の正規表現言語要素です。 他のすべての正規表現言語要素 ( 文字エスケープを含む) は、正規表現パターンでのみ許可され、置換パターンでは認識されません。

この RegexMatchTimeoutException 例外は、置換操作の実行時間が、コンストラクターで指定されたタイムアウト時間を超えた場合にスローされ Regex.Regex(String, RegexOptions, TimeSpan) ます。 コンストラクターを呼び出すときにタイムアウト間隔を設定しなかった場合は、オブジェクトが作成されたアプリケーションドメインに対して設定されたタイムアウト値を操作が超えた場合に、例外がスローされ Regex ます。 コンストラクター呼び出しまたはアプリケーションドメインのプロパティでタイムアウトが定義されていない場合、またはタイムアウト Regex 値がの場合 Regex.InfiniteMatchTimeout 、例外はスローされません。

一致するものがない場合、メソッドは変更なしで返されるため、メソッドを使用して、 input Object.ReferenceEquals メソッドが入力文字列に置換を行ったかどうかを判断できます。

こちらもご覧ください

適用対象

Replace(String, MatchEvaluator, Int32)

指定した入力文字列内で正規表現パターンに一致する文字列を、指定した最大回数だけ、MatchEvaluator デリゲートによって返される文字列に置き換えます。

public:
 System::String ^ Replace(System::String ^ input, System::Text::RegularExpressions::MatchEvaluator ^ evaluator, int count);
public string Replace (string input, System.Text.RegularExpressions.MatchEvaluator evaluator, int count);
member this.Replace : string * System.Text.RegularExpressions.MatchEvaluator * int -> string
Public Function Replace (input As String, evaluator As MatchEvaluator, count As Integer) As String

パラメーター

input
String

一致する対象を検索する文字列。

evaluator
MatchEvaluator

各一致文字列を調べ、元の一致文字列または置換文字列のどちらかを返すカスタム メソッド。

count
Int32

置換を実行する最大回数。

戻り値

String

一致する各文字列が置換文字列に置き換えられる以外は入力文字列と同じである新しい文字列。 正規表現パターンが現在のインスタンスで一致しない場合、このメソッドは現在のインスタンスをそのまま返します。

例外

input または evaluatornull です。

タイムアウトが発生しました。 タイムアウトの詳細については、「解説」をご覧ください。

次の例では、正規表現を使用して、リスト内の単語の半分を意図的に見落とします。 正規表現を使用して \w*(ie|ei)\w* 、"ie" または "ei" という文字を含む単語と一致します。 一致する単語の前半を メソッドに渡します。次に、 メソッドを使用して、一致する文字列の ReverseLetter Replace(String, String, String, RegexOptions) "i" と "e" を反転します。 残りの単語は変更されません。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "deceive relieve achieve belief fierce receive";
      string pattern = @"\w*(ie|ei)\w*";
      Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
      Console.WriteLine("Original string: " + input);
      
      string result = rgx.Replace(input, new MatchEvaluator(Example.ReverseLetter), 
                                  input.Split(' ').Length / 2);
      Console.WriteLine("Returned string: " + result);
   }

   static string ReverseLetter(Match match)
   {
      return Regex.Replace(match.Value, "([ie])([ie])", "$2$1", 
                           RegexOptions.IgnoreCase);            
   }
}
// The example displays the following output:
//    Original string: deceive relieve achieve belief fierce receive
//    Returned string: decieve releive acheive belief fierce receive
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "deceive relieve achieve belief fierce receive"
      Dim pattern As String = "\w*(ie|ei)\w*"
      Dim rgx As New Regex(pattern, RegexOptions.IgnoreCase)
      Console.WriteLine("Original string: " + input)
      
      Dim result As String = rgx.Replace(input, AddressOf ReverseLetter, 
                                           input.Split(" "c).Length \ 2)
      Console.WriteLine("Returned string: " + result)
   End Sub

   Public Function ReverseLetter(match As Match) As String
      Return Regex.Replace(match.Value, "([ie])([ie])", "$2$1", 
                           RegexOptions.IgnoreCase)            
   End Function
End Module
' The example displays the following output:
'    Original string: deceive relieve achieve belief fierce receive
'    Returned string: decieve releive acheive belief fierce receive

正規表現 \w*(ie|ei)\w* は、次の表に示すように定義されています。

パターン 説明
\w* 0 個以上の単語に使用される文字に一致します。
(ie|ei) "ie" または "ei" と一致します。
\w* 0 個以上の単語に使用される文字に一致します。

メソッドの正規表現パターンは ([ie])([ie]) ReverseLetter 、diphtて "ie" または "ei" の最初の "i" または "e" と一致し、最初のキャプチャ グループに文字を割り当てる。 2 番目の "i" または "e" と一致し、2 番目のキャプチャ グループに文字を割り当てる。 その後、置換パターン を使用して メソッドを呼び出すことによって Replace(String, String, String) 、2 つの文字が反転されます $2$1

注釈

メソッド Regex.Replace(String, MatchEvaluator, Int32) は、次の条件に当てはまる場合に正規表現の一致を置き換える場合に便利です。

  • 置換文字列は、正規表現の置換パターンでは簡単に指定できません。

  • 置換文字列は、一致した文字列に対して何らかの処理が行われた結果として得られます。

  • 置換文字列は、条件付き処理の結果です。

メソッドは、 メソッドを呼び出し、返されたコレクション内の最初のオブジェクトをデリゲート Regex.Matches(String) count Match MatchCollection に渡すのと同 evaluator じです。

正規表現は、現在のオブジェクトのコンストラクターによって定義されるパターン Regex です。

パラメーター evaluator は、定義し、各一致を調べるカスタム メソッドのデリゲートです。 カスタム メソッドには、デリゲートと一致する次のシグネチャが必要 MatchEvaluator です。

public string MatchEvaluatorMethod(Match match)
Public Function MatchEvaluatorMethod(match As Match) As String

カスタム メソッドは、一致した入力を置き換える文字列を返します。

置換操作の実行時間が、コンストラクターによって指定されたタイム アウト間隔を超えた場合、 RegexMatchTimeoutException 例外がスロー Regex.Regex(String, RegexOptions, TimeSpan) されます。 コンストラクターの呼び出し時にタイム アウト間隔を設定しない場合、オブジェクトが作成されるアプリケーション ドメインに対して確立された任意のタイム アウト値を操作が超えた場合、例外がスロー Regex されます。 コンストラクター呼び出しまたはアプリケーション ドメインのプロパティでタイム アウトが定義されていない場合、またはタイム アウト値が の場合、 Regex Regex.InfiniteMatchTimeout 例外はスローされません。

一致がない場合、メソッドは変更されずに返すので、 メソッドを使用して、メソッドが入力文字列の置換を行った input Object.ReferenceEquals かどうかを判断できます。

こちらもご覧ください

適用対象