Regex コンストラクター
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Regex クラスの新しいインスタンスを初期化します。
オーバーロード
Regex() |
Regex クラスの新しいインスタンスを初期化します。 |
Regex(String) |
指定した正規表現の Regex クラスの新しいインスタンスを初期化します。 |
Regex(SerializationInfo, StreamingContext) |
古い.
シリアル化されたデータを使用して、Regex クラスの新しいインスタンスを初期化します。 |
Regex(String, RegexOptions) |
パターンを変更するオプションを使用して、指定した正規表現の Regex クラスの新しいインスタンスを初期化します。 |
Regex(String, RegexOptions, TimeSpan) |
パターンを変更するオプションと、パターン マッチング メソッドがタイムアウトするまでの一致を試行する時間を指定する値を使用して、指定した正規表現の Regex クラスの新しいインスタンスを初期化します。 |
Regex()
Regex(String)
- ソース:
- Regex.cs
- ソース:
- Regex.cs
- ソース:
- Regex.cs
指定した正規表現の Regex クラスの新しいインスタンスを初期化します。
public:
Regex(System::String ^ pattern);
public Regex (string pattern);
new System.Text.RegularExpressions.Regex : string -> System.Text.RegularExpressions.Regex
Public Sub New (pattern As String)
パラメーター
- pattern
- String
照合する正規表現パターン。
例外
正規表現解析エラーが発生しました。
pattern
は null
です。
例
次の例は、このコンストラクターを使用して、文字 "a" または "t" で始まる任意の単語に一致する正規表現をインスタンス化する方法を示しています。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b[at]\w+";
string text = "The threaded application ate up the thread pool as it executed.";
MatchCollection matches;
Regex defaultRegex = new Regex(pattern);
// Get matches of pattern in text
matches = defaultRegex.Matches(text);
Console.WriteLine("Parsing '{0}'", text);
// Iterate matches
for (int ctr = 0; ctr < matches.Count; ctr++)
Console.WriteLine("{0}. {1}", ctr, matches[ctr].Value);
}
}
// The example displays the following output:
// Parsing 'The threaded application ate up the thread pool as it executed.'
// 0. threaded
// 1. application
// 2. ate
// 3. the
// 4. thread
// 5. as
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b[at]\w+"
Dim text As String = "The threaded application ate up the thread pool as it executed."
Dim matches As MatchCollection
Dim defaultRegex As New Regex(pattern)
' Get matches of pattern in text
matches = defaultRegex.Matches(text)
Console.WriteLine("Parsing '{0}'", text)
' Iterate matches
For ctr As Integer = 0 to matches.Count - 1
Console.WriteLine("{0}. {1}", ctr, matches(ctr).Value)
Next
End Sub
End Module
' The example displays the following output:
' Parsing 'The threaded application ate up the thread pool as it executed.'
' 0. threaded
' 1. application
' 2. ate
' 3. the
' 4. thread
' 5. as
比較では既定で大文字と小文字が区別されるため、正規表現パターンはテキストの先頭にある "The" という単語と一致できないことに注意してください。 大文字と小文字を区別しない比較の例については、Regex(String, RegexOptions) コンストラクターを参照してください。
注釈
警告
pattern
パラメーターは、一致する文字列を記号的に記述する正規表現言語要素で構成されます。 正規表現の詳細については、「.NET 正規表現の と 正規表現言語 - クイック リファレンス」 トピックを参照してください。
Regex(String) コンストラクターの呼び出しは、options
引数の値が None の Regex(String, RegexOptions) コンストラクターを呼び出すことと同じです。
Regex オブジェクトは不変です。つまり、オブジェクトは作成時に定義した一致パターンにのみ使用できます。 ただし、再コンパイルせずに何度でも使用できます。
このコンストラクターは、pattern
で定義されているアルファベット文字の大文字と小文字が区別される一致を試みる正規表現オブジェクトをインスタンス化します。 大文字と小文字を区別しない一致の場合は、Regex.Regex(String, RegexOptions) コンストラクターを使用します。
注意 (呼び出し元)
このコンストラクターは、作成されるアプリケーション ドメインの既定のタイムアウト値を使用する Regex オブジェクトを作成します。 アプリケーション ドメインに対してタイムアウト値が定義されていない場合、Regex オブジェクトは値 InfiniteMatchTimeoutを使用します。これにより、操作のタイムアウトが回避されます。Regex オブジェクトを作成するために推奨されるコンストラクターは Regex(String, RegexOptions, TimeSpan)です。これにより、タイムアウト間隔を設定できます。
こちらもご覧ください
- 正規表現言語要素 を
する
適用対象
Regex(SerializationInfo, StreamingContext)
- ソース:
- Regex.cs
- ソース:
- Regex.cs
- ソース:
- Regex.cs
注意事項
This API supports obsolete formatter-based serialization. It should not be called or extended by application code.
シリアル化されたデータを使用して、Regex クラスの新しいインスタンスを初期化します。
protected:
Regex(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
protected Regex (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
[System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
protected Regex (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
new System.Text.RegularExpressions.Regex : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Text.RegularExpressions.Regex
[<System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Text.RegularExpressions.Regex : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Text.RegularExpressions.Regex
Protected Sub New (info As SerializationInfo, context As StreamingContext)
パラメーター
- info
- SerializationInfo
シリアル化されたパターンと RegexOptions 情報を含むオブジェクト。
- context
- StreamingContext
このシリアル化の宛先。 (このパラメーターは使用されません。null
指定してください)。
- 属性
例外
正規表現解析エラーが発生しました。
info
に含まれるパターンは null
です。
無効な RegexOptions フラグが含まれている info
。
適用対象
Regex(String, RegexOptions)
- ソース:
- Regex.cs
- ソース:
- Regex.cs
- ソース:
- Regex.cs
パターンを変更するオプションを使用して、指定した正規表現の Regex クラスの新しいインスタンスを初期化します。
public:
Regex(System::String ^ pattern, System::Text::RegularExpressions::RegexOptions options);
public Regex (string pattern, System.Text.RegularExpressions.RegexOptions options);
new System.Text.RegularExpressions.Regex : string * System.Text.RegularExpressions.RegexOptions -> System.Text.RegularExpressions.Regex
Public Sub New (pattern As String, options As RegexOptions)
パラメーター
- pattern
- String
照合する正規表現パターン。
- options
- RegexOptions
正規表現を変更する列挙値のビットごとの組み合わせ。
例外
正規表現解析エラーが発生しました。
pattern
は null
です。
options
無効なフラグが含まれています。
例
次の例は、このコンストラクターを使用して、文字 "a" または "t" で始まる任意の単語に一致する正規表現をインスタンス化する方法を示しています。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b[at]\w+";
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Compiled;
string text = "The threaded application ate up the thread pool as it executed.";
MatchCollection matches;
Regex optionRegex = new Regex(pattern, options);
Console.WriteLine("Parsing '{0}' with options {1}:", text, options.ToString());
// Get matches of pattern in text
matches = optionRegex.Matches(text);
// Iterate matches
for (int ctr = 0; ctr < matches.Count; ctr++)
Console.WriteLine("{0}. {1}", ctr, matches[ctr].Value);
}
}
// The example displays the following output:
// Parsing 'The threaded application ate up the thread pool as it executed.'
// with options IgnoreCase, Compiled:
// 0. The
// 1. threaded
// 2. application
// 3. ate
// 4. the
// 5. thread
// 6. as
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b[at]\w+"
Dim options As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Compiled
Dim text As String = "The threaded application ate up the thread pool as it executed."
Dim matches As MatchCollection
Dim optionRegex As New Regex(pattern, options)
Console.WriteLine("Parsing '{0}' with options {1}:", text, options.ToString())
' Get matches of pattern in text
matches = optionRegex.Matches(text)
' Iterate matches
For ctr As Integer = 0 to matches.Count - 1
Console.WriteLine("{0}. {1}", ctr, matches(ctr).Value)
Next
End Sub
End Module
' The example displays the following output:
' Parsing 'The threaded application ate up the thread pool as it executed.'
' with options IgnoreCase, Compiled:
' 0. The
' 1. threaded
' 2. application
' 3. ate
' 4. the
' 5. thread
' 6. as
options
パラメーターで大文字と小文字を区別しない比較が定義されているため、一致コレクションにはテキストを開始する単語 "The" が含まれていることに注意してください。
注釈
警告
pattern
パラメーターは、一致する文字列を記号的に記述する正規表現言語要素で構成されます。 正規表現の詳細については、「.NET 正規表現の と 正規表現言語 - クイック リファレンス」 トピックを参照してください。
Regex オブジェクトは不変です。つまり、オブジェクトは作成時に定義した一致パラメーターにのみ使用できます。 ただし、再コンパイルせずに何度でも使用できます。
注意 (呼び出し元)
このコンストラクターは、作成されるアプリケーション ドメインの既定のタイムアウト値を使用する Regex オブジェクトを作成します。 アプリケーション ドメインに対してタイムアウト値が定義されていない場合、Regex オブジェクトは値 InfiniteMatchTimeoutを使用します。これにより、操作のタイムアウトが回避されます。Regex オブジェクトを作成するために推奨されるコンストラクターは Regex(String, RegexOptions, TimeSpan)です。これにより、タイムアウト間隔を設定できます。
こちらもご覧ください
- 正規表現言語要素 を
する
適用対象
Regex(String, RegexOptions, TimeSpan)
- ソース:
- Regex.cs
- ソース:
- Regex.cs
- ソース:
- Regex.cs
パターンを変更するオプションと、パターン マッチング メソッドがタイムアウトするまでの一致を試行する時間を指定する値を使用して、指定した正規表現の Regex クラスの新しいインスタンスを初期化します。
public:
Regex(System::String ^ pattern, System::Text::RegularExpressions::RegexOptions options, TimeSpan matchTimeout);
public Regex (string pattern, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);
new System.Text.RegularExpressions.Regex : string * System.Text.RegularExpressions.RegexOptions * TimeSpan -> System.Text.RegularExpressions.Regex
Public Sub New (pattern As String, options As RegexOptions, matchTimeout As TimeSpan)
パラメーター
- pattern
- String
照合する正規表現パターン。
- options
- RegexOptions
正規表現を変更する列挙値のビットごとの組み合わせ。
- matchTimeout
- TimeSpan
タイムアウト間隔、またはメソッドがタイムアウトしないことを示す InfiniteMatchTimeout。
例外
正規表現解析エラーが発生しました。
pattern
は null
です。
例
次の例では、Regex(String, RegexOptions, TimeSpan) コンストラクターを呼び出して、タイムアウト値が 1 秒の Regex オブジェクトをインスタンス化します。 行の末尾にある 1 つ以上の "a" 文字の 1 つ以上のシーケンスに一致する正規表現パターン (a+)+$
は、過剰なバックトラッキングの対象となります。
RegexMatchTimeoutException がスローされた場合、この例ではタイムアウト値を最大値の 3 秒まで増やします。 それ以外の場合は、パターンに一致する試行が破棄されます。
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Security;
using System.Text.RegularExpressions;
using System.Threading;
public class Example
{
const int MaxTimeoutInSeconds = 3;
public static void Main()
{
string pattern = @"(a+)+$"; // DO NOT REUSE THIS PATTERN.
Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase, TimeSpan.FromSeconds(1));
Stopwatch sw = null;
string[] inputs= { "aa", "aaaa>",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaa>",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>" };
foreach (var inputValue in inputs) {
Console.WriteLine("Processing {0}", inputValue);
bool timedOut = false;
do {
try {
sw = Stopwatch.StartNew();
// Display the result.
if (rgx.IsMatch(inputValue)) {
sw.Stop();
Console.WriteLine(@"Valid: '{0}' ({1:ss\.fffffff} seconds)",
inputValue, sw.Elapsed);
}
else {
sw.Stop();
Console.WriteLine(@"'{0}' is not a valid string. ({1:ss\.fffff} seconds)",
inputValue, sw.Elapsed);
}
}
catch (RegexMatchTimeoutException e) {
sw.Stop();
// Display the elapsed time until the exception.
Console.WriteLine(@"Timeout with '{0}' after {1:ss\.fffff}",
inputValue, sw.Elapsed);
Thread.Sleep(1500); // Pause for 1.5 seconds.
// Increase the timeout interval and retry.
TimeSpan timeout = e.MatchTimeout.Add(TimeSpan.FromSeconds(1));
if (timeout.TotalSeconds > MaxTimeoutInSeconds) {
Console.WriteLine("Maximum timeout interval of {0} seconds exceeded.",
MaxTimeoutInSeconds);
timedOut = false;
}
else {
Console.WriteLine("Changing the timeout interval to {0}",
timeout);
rgx = new Regex(pattern, RegexOptions.IgnoreCase, timeout);
timedOut = true;
}
}
} while (timedOut);
Console.WriteLine();
}
}
}
// The example displays output like the following :
// Processing aa
// Valid: 'aa' (00.0000779 seconds)
//
// Processing aaaa>
// 'aaaa>' is not a valid string. (00.00005 seconds)
//
// Processing aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
// Valid: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' (00.0000043 seconds)
//
// Processing aaaaaaaaaaaaaaaaaaaaaa>
// Timeout with 'aaaaaaaaaaaaaaaaaaaaaa>' after 01.00469
// Changing the timeout interval to 00:00:02
// Timeout with 'aaaaaaaaaaaaaaaaaaaaaa>' after 02.01202
// Changing the timeout interval to 00:00:03
// Timeout with 'aaaaaaaaaaaaaaaaaaaaaa>' after 03.01043
// Maximum timeout interval of 3 seconds exceeded.
//
// Processing aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
// Timeout with 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>' after 03.01018
// Maximum timeout interval of 3 seconds exceeded.
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Security
Imports System.Text.RegularExpressions
Imports System.Threading
Module Example
Const MaxTimeoutInSeconds As Integer = 3
Public Sub Main()
Dim pattern As String = "(a+)+$" ' DO NOT REUSE THIS PATTERN.
Dim rgx As New Regex(pattern, RegexOptions.IgnoreCase, TimeSpan.FromSeconds(1))
Dim sw As Stopwatch = Nothing
Dim inputs() As String = { "aa", "aaaa>",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaa>",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>" }
For Each inputValue In inputs
Console.WriteLine("Processing {0}", inputValue)
Dim timedOut As Boolean = False
Do
Try
sw = Stopwatch.StartNew()
' Display the result.
If rgx.IsMatch(inputValue) Then
sw.Stop()
Console.WriteLine("Valid: '{0}' ({1:ss\.fffffff} seconds)",
inputValue, sw.Elapsed)
Else
sw.Stop()
Console.WriteLine("'{0}' is not a valid string. ({1:ss\.fffff} seconds)",
inputValue, sw.Elapsed)
End If
Catch e As RegexMatchTimeoutException
sw.Stop()
' Display the elapsed time until the exception.
Console.WriteLine("Timeout with '{0}' after {1:ss\.fffff}",
inputValue, sw.Elapsed)
Thread.Sleep(1500) ' Pause for 1.5 seconds.
' Increase the timeout interval and retry.
Dim timeout As TimeSpan = e.MatchTimeout.Add(TimeSpan.FromSeconds(1))
If timeout.TotalSeconds > MaxTimeoutInSeconds Then
Console.WriteLine("Maximum timeout interval of {0} seconds exceeded.",
MaxTimeoutInSeconds)
timedOut = False
Else
Console.WriteLine("Changing the timeout interval to {0}",
timeout)
rgx = New Regex(pattern, RegexOptions.IgnoreCase, timeout)
timedOut = True
End If
End Try
Loop While timedOut
Console.WriteLine()
Next
End Sub
End Module
' The example displays output like the following:
' Processing aa
' Valid: 'aa' (00.0000779 seconds)
'
' Processing aaaa>
' 'aaaa>' is not a valid string. (00.00005 seconds)
'
' Processing aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
' Valid: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' (00.0000043 seconds)
'
' Processing aaaaaaaaaaaaaaaaaaaaaa>
' Timeout with 'aaaaaaaaaaaaaaaaaaaaaa>' after 01.00469
' Changing the timeout interval to 00:00:02
' Timeout with 'aaaaaaaaaaaaaaaaaaaaaa>' after 02.01202
' Changing the timeout interval to 00:00:03
' Timeout with 'aaaaaaaaaaaaaaaaaaaaaa>' after 03.01043
' Maximum timeout interval of 3 seconds exceeded.
'
' Processing aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
' Timeout with 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>' after 03.01018
' Maximum timeout interval of 3 seconds exceeded.
注釈
pattern
パラメーターは、一致する文字列を記号的に記述する正規表現言語要素で構成されます。 正規表現の詳細については、「.NET 正規表現の と 正規表現言語 - クイック リファレンス」 トピックを参照してください。
Regex オブジェクトは不変です。つまり、オブジェクトは作成時に定義した一致パターンにのみ使用できます。 ただし、再コンパイルせずに何度でも使用できます。
matchTimeout
パラメーターは、パターン マッチング メソッドがタイムアウトするまでの一致の検索を試行する時間を指定します。その時間間隔で一致が見つからない場合、パターン マッチング メソッドは RegexMatchTimeoutException 例外をスローします。
matchTimeout
は、Regex オブジェクトが作成されるアプリケーション ドメインに対して定義されている既定のタイムアウト値をオーバーライドします。
matchTimeout
タイムアウト間隔を観察するインスタンス パターン マッチング メソッドには、次のようなものがあります。
タイムアウト間隔を設定すると、過剰なバックトラッキングに依存する正規表現が、近い一致を含む入力を処理するときに応答を停止するように見えるのを防ぐことができます。 詳細については、「
正規表現パターンの長さと複雑さ。 より長く複雑な正規表現では、短くて単純な正規表現よりも多くの時間が必要です。
予想されるマシンの負荷。 CPU とメモリの使用率が高いシステムでは、処理に時間がかかります。
注意 (呼び出し元)
matchTimeout
パラメーターを適切な値 (2 秒など) に設定することをお勧めします。
InfiniteMatchTimeoutを指定してタイムアウトを無効にすると、正規表現エンジンのパフォーマンスが若干向上します。 ただし、タイムアウトは次の条件でのみ無効にする必要があります。
正規表現によって処理される入力が既知の信頼できるソースから派生した場合、または静的テキストで構成されている場合。 これにより、ユーザーによって動的に入力されたテキストが除外されます。
正規表現パターンが十分にテストされ、一致、一致しない、および近い一致が効率的に処理されるようにする場合。
正規表現パターンに、近い一致を処理するときに過剰なバックトラッキングを引き起こすことがわかっている言語要素が含まれている場合。
こちらもご覧ください
- 正規表現 でのバックトラッキングの
- 正規表現言語要素 を
する
適用対象
.NET