Regex Конструкторы
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Инициализирует новый экземпляр класса Regex.
Перегрузки
Regex() |
Инициализирует новый экземпляр класса Regex. |
Regex(String) |
Инициализирует новый экземпляр класса Regex для заданного регулярного выражения. |
Regex(SerializationInfo, StreamingContext) |
Устаревшие..
Инициализирует новый экземпляр класса Regex, используя сериализованные данные. |
Regex(String, RegexOptions) |
Инициализирует новый экземпляр класса Regex для указанного регулярного выражения с параметрами, изменяющими шаблон. |
Regex(String, RegexOptions, TimeSpan) |
Инициализирует новый экземпляр класса Regex для указанного регулярного выражения с параметрами, которые изменяют шаблон, и значение, указывающее, как долго метод сравнения с шаблоном должен пытаться найти совпадение, прежде чем время ожидания истечет. |
Regex()
- Исходный код:
- Regex.cs
- Исходный код:
- Regex.cs
- Исходный код:
- Regex.cs
Инициализирует новый экземпляр класса Regex.
protected:
Regex();
protected Regex ();
Protected Sub New ()
Комментарии
Обратите внимание, что этот конструктор защищен; его могут вызывать только классы, производные 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) эквивалентен вызову конструктора Regex(String, RegexOptions) со значением None для аргумента options
.
Объект 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
.
info
содержит недопустимый флаг RegexOptions.
Применяется к
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
Обратите внимание, что коллекция совпадений содержит слово The, которое начинается с текста, так как options
параметр определяет сравнения без учета регистра.
Комментарии
Параметр 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
.
options
не является допустимым значением RegexOptions.
-или-
Значение параметра matchTimeout
отрицательное, равно нулю или больше, чем приблизительно 24 дня.
Примеры
В следующем примере вызывается Regex(String, RegexOptions, TimeSpan) конструктор для создания экземпляра Regex объекта со значением времени ожидания в одну секунду. Шаблон регулярного выражения (a+)+$
, который сопоставляется с последовательностью из одного или нескольких символов "a" в конце строки, относится к шаблонам с чрезмерным использованием поиска с возвратом. RegexMatchTimeoutException Если возникает исключение , в примере значение времени ожидания увеличивается до максимального значения в три секунды. В противном случае она откажется от попытки соответствия шаблону.
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
, которые соблюдают интервал времени ожидания, включают следующие:
Установка интервала времени ожидания предотвращает появление регулярных выражений, которые зависят от чрезмерного обратного отслеживания, чтобы перестать отвечать при обработке входных данных, содержащих почти совпадения. Дополнительные сведения см. в разделе Рекомендации по регулярным выражениям и обратному отслеживанию. Чтобы задать разумный интервал времени ожидания, учитывайте следующие факторы:
Длина и сложность шаблона регулярного выражения. Для более длинных и сложных регулярных выражений требуется больше времени, чем для более коротких и более простых.
Ожидаемая загрузка компьютера. Обработка занимает больше времени в системах с высокой загрузкой ЦП и памяти.
Примечания для тех, кто вызывает этот метод
Рекомендуется задать для параметра соответствующее matchTimeout
значение, например две секунды. Если отключить время ожидания, указав InfiniteMatchTimeout, подсистема регулярных выражений обеспечивает немного более высокую производительность. Однако отключать время ожидания следует только при следующих условиях:
Когда входные данные, обрабатываемые регулярным выражением, являются производными от известного и доверенного источника или состоят из статического текста. Это исключает текст, который был динамически введен пользователями.
Если шаблон регулярного выражения был тщательно протестирован, чтобы убедиться, что он эффективно обрабатывает совпадения, несоверчатые и близкие совпадения.
Если шаблон регулярного выражения не содержит языковых элементов, которые, как известно, приводят к чрезмерному возврату при обработке близкого совпадения.
См. также раздел
Применяется к
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по