Regex Oluşturucular
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Regex sınıfının yeni bir örneğini başlatır.
Aşırı Yüklemeler
Regex() |
Regex sınıfının yeni bir örneğini başlatır. |
Regex(String) |
Belirtilen normal ifade için sınıfının yeni bir örneğini Regex başlatır. |
Regex(SerializationInfo, StreamingContext) |
Geçersiz.
Serileştirilmiş verileri kullanarak sınıfının yeni bir örneğini Regex başlatır. |
Regex(String, RegexOptions) |
Deseni Regex değiştiren seçeneklerle belirtilen normal ifade için sınıfının yeni bir örneğini başlatır. |
Regex(String, RegexOptions, TimeSpan) |
Belirtilen normal ifade için sınıfın Regex yeni bir örneğini başlatır; deseni değiştiren seçenekler ve bir desen eşleştirme yönteminin zaman aşımına uğramadan önce ne kadar süreyle eşleşme denemesi gerektiğini belirten bir değerle. |
Regex()
Regex(String)
- Source:
- Regex.cs
- Source:
- Regex.cs
- Source:
- Regex.cs
Belirtilen normal ifade için sınıfının yeni bir örneğini Regex başlatır.
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)
Parametreler
- pattern
- String
Eşleştirecek normal ifade deseni.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
pattern
, null
değeridir.
Örnekler
Aşağıdaki örnekte, "a" veya "t" harfleriyle başlayan herhangi bir sözcükle eşleşen normal bir ifadenin örneğini oluşturmak için bu oluşturucunun nasıl kullanılacağı gösterilmektedir.
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
Karşılaştırmalar varsayılan olarak büyük/küçük harfe duyarlı olduğundan, normal ifade deseninin metnin başındaki "The" sözcüğüyle eşleşemediğini unutmayın. Büyük/küçük harfe duyarlı olmayan karşılaştırma örneği için oluşturucuya Regex(String, RegexOptions) bakın.
Açıklamalar
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru konularına bakın.
Oluşturucunun Regex(String) çağrılması, bağımsız değişken için değeriyle None oluşturucuyu çağırmaya Regex(String, RegexOptions)options
eşdeğerdir.
Bir Regex nesne sabittir, yani yalnızca oluşturduğunuzda tanımladığınız eşleştirme deseni için kullanılabilir. Ancak, yeniden derlenmeden birkaç kez kullanılabilir.
Bu oluşturucu, içinde pattern
tanımlanan alfabetik karakterlerin büyük/küçük harfe duyarlı eşleşmesini deneyen normal bir ifade nesnesinin örneğini oluşturur. Büyük/küçük harfe duyarlı olmayan bir eşleşme için oluşturucuyu Regex.Regex(String, RegexOptions) kullanın.
Arayanlara Notlar
Bu oluşturucu, oluşturulduğu uygulama etki alanının varsayılan zaman aşımı değerini kullanan bir Regex nesne oluşturur. Uygulama etki alanı için bir zaman aşımı değeri tanımlanmamışsa, Regex nesnesi değerini InfiniteMatchTimeoutkullanır ve bu da işlemin zaman aşımına geçmesini engeller. Nesne oluşturmak Regex için önerilen oluşturucu, zaman aşımı aralığını ayarlamanıza olanak tanıyan şeklindedir Regex(String, RegexOptions, TimeSpan).
Ayrıca bkz.
Şunlara uygulanır
Regex(SerializationInfo, StreamingContext)
- Source:
- Regex.cs
- Source:
- Regex.cs
- Source:
- Regex.cs
Dikkat
This API supports obsolete formatter-based serialization. It should not be called or extended by application code.
Serileştirilmiş verileri kullanarak sınıfının yeni bir örneğini Regex başlatır.
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)
Parametreler
- info
- SerializationInfo
Serileştirilmiş bir desen ve RegexOptions bilgi içeren nesne.
- context
- StreamingContext
Bu serileştirmenin hedefi. (Bu parametre kullanılmaz; belirtin null
.)
- Öznitelikler
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
içeren info
desen şeklindedir null
.
info
geçersiz RegexOptions bir bayrak içeriyor.
Şunlara uygulanır
Regex(String, RegexOptions)
- Source:
- Regex.cs
- Source:
- Regex.cs
- Source:
- Regex.cs
Deseni Regex değiştiren seçeneklerle belirtilen normal ifade için sınıfının yeni bir örneğini başlatır.
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)
Parametreler
- pattern
- String
Eşleştirecek normal ifade deseni.
- options
- RegexOptions
Normal ifadeyi değiştiren numaralandırma değerlerinin bit düzeyinde birleşimi.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
pattern
, null
değeridir.
options
geçersiz bir bayrak içeriyor.
Örnekler
Aşağıdaki örnekte, "a" veya "t" harfleriyle başlayan herhangi bir sözcükle eşleşen normal bir ifadenin örneğini oluşturmak için bu oluşturucunun nasıl kullanılacağı gösterilmektedir.
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
parametresi büyük/küçük harfe duyarsız karşılaştırmalar tanımladığından, eşleştirme koleksiyonunun options
metni başlayan "The" sözcüğünü içerdiğini unutmayın.
Açıklamalar
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru konularına bakın.
Nesne Regex sabittir, yani yalnızca oluşturduğunuzda tanımladığınız eşleştirme parametreleri için kullanılabilir. Ancak, yeniden derlenmeden birkaç kez kullanılabilir.
Arayanlara Notlar
Bu oluşturucu, oluşturulduğu uygulama etki alanının varsayılan zaman aşımı değerini kullanan bir Regex nesne oluşturur. Uygulama etki alanı için bir zaman aşımı değeri tanımlanmamışsa, Regex nesnesi değerini InfiniteMatchTimeoutkullanır ve bu da işlemin zaman aşımına geçmesini engeller. Nesne oluşturmak Regex için önerilen oluşturucu, zaman aşımı aralığını ayarlamanıza olanak tanıyan şeklindedir Regex(String, RegexOptions, TimeSpan).
Ayrıca bkz.
Şunlara uygulanır
Regex(String, RegexOptions, TimeSpan)
- Source:
- Regex.cs
- Source:
- Regex.cs
- Source:
- Regex.cs
Belirtilen normal ifade için sınıfın Regex yeni bir örneğini başlatır; deseni değiştiren seçenekler ve bir desen eşleştirme yönteminin zaman aşımına uğramadan önce ne kadar süreyle eşleşme denemesi gerektiğini belirten bir değerle.
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)
Parametreler
- pattern
- String
Eşleştirecek normal ifade deseni.
- options
- RegexOptions
Normal ifadeyi değiştiren numaralandırma değerlerinin bit düzeyinde birleşimi.
- matchTimeout
- TimeSpan
Zaman aşımı aralığı veya InfiniteMatchTimeout yöntemin zaman aşımına neden olmaması gerektiğini belirtmek için.
Özel durumlar
Normal ifade ayrıştırma hatası oluştu.
pattern
, null
değeridir.
options
geçerli RegexOptions bir değer değil.
-veya-
matchTimeout
negatif, sıfır veya yaklaşık 24 günden büyük.
Örnekler
Aşağıdaki örnek, bir saniyelik Regex(String, RegexOptions, TimeSpan) zaman aşımı değerine sahip bir Regex nesnenin örneğini oluşturmak için oluşturucuyu çağırır. Bir satırın sonundaki bir veya daha fazla "a" karakterinin bir veya daha fazla dizisiyle eşleşen normal ifade deseni (a+)+$
aşırı geri izleme işlemine tabidir. oluşturulursa RegexMatchTimeoutException , örnek zaman aşımı değerini en fazla üç saniyelik değere kadar artırır. Aksi takdirde, deseni eşleştirme girişiminden vazgeçer.
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.
Açıklamalar
parametresi, pattern
eşleşecek dizeyi sembolik olarak tanımlayan normal ifade dili öğelerinden oluşur. Normal ifadeler hakkında daha fazla bilgi için .NET Normal İfadeleri ve Normal İfade Dili - Hızlı Başvuru konularına bakın.
Bir Regex nesne sabittir, yani yalnızca oluşturduğunuzda tanımladığınız eşleştirme deseni için kullanılabilir. Ancak, yeniden derlenmeden birkaç kez kullanılabilir.
parametresi, matchTimeout
desen eşleştirme yönteminin zaman aşımına uğramadan önce eşleşmeyi ne kadar süreyle bulmaya çalışılması gerektiğini belirtir. Bu zaman aralığında eşleşme bulunmazsa, desen eşleştirme yöntemi bir RegexMatchTimeoutException özel durum oluşturur. matchTimeout
, nesnenin oluşturulduğu uygulama etki alanı Regex için tanımlanan varsayılan zaman aşımı değerlerini geçersiz kılar. Zaman aşımı aralığını gözlemleyen matchTimeout
örnek desen eşleştirme yöntemleri şunları içerir:
Zaman aşımı aralığı ayarlamak, aşırı geri izleme kullanan normal ifadelerin, yakın eşleşmeler içeren girişleri işlerken yanıt vermeyi durdurmak için görünmesini engeller. Daha fazla bilgi için bkz. Normal İfadeler ve Geri İzlemeiçin En İyi Yöntemler. Makul bir zaman aşımı aralığı ayarlamak için aşağıdaki faktörleri göz önünde bulundurun:
Normal ifade deseninin uzunluğu ve karmaşıklığı. Daha uzun ve daha karmaşık normal ifadeler, daha kısa ve basit ifadelerden daha fazla zaman gerektirir.
Beklenen makine yükü. İşlem, yüksek CPU ve bellek kullanımına sahip sistemlerde daha fazla zaman alır.
Arayanlara Notlar
parametresini matchTimeout
iki saniye gibi uygun bir değere ayarlamanızı öneririz. belirterek InfiniteMatchTimeoutzaman aşımlarını devre dışı bırakırsanız, normal ifade altyapısı biraz daha iyi performans sunar. Ancak, zaman aşımlarını yalnızca aşağıdaki koşullar altında devre dışı bırakmanız gerekir:
Normal bir ifade tarafından işlenen giriş bilinen ve güvenilir bir kaynaktan türetildiğinde veya statik metinden oluştuğunda. Bu, kullanıcılar tarafından dinamik olarak giriş yapılan metinleri dışlar.
Normal ifade deseni eşleşmeleri, eşleşme olmayanları ve yakın eşleşmeleri verimli bir şekilde işlediğinden emin olmak için kapsamlı bir şekilde test edildiğinde.
Normal ifade deseni, yakın bir eşleşmeyi işlerken aşırı geri dönüşe neden olduğu bilinen bir dil öğesi içermediğinde.
Ayrıca bkz.
Şunlara uygulanır
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin