Regex.CompileToAssembly 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
編譯正則表達式,並將其儲存至單一元件中的磁碟。
多載
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) |
已淘汰.
將一或多個指定的 Regex 物件和指定的資源文件編譯為具有指定屬性的具名元件。 |
CompileToAssembly(RegexCompilationInfo[], AssemblyName) |
已淘汰.
將一或多個指定的 Regex 物件編譯成具名元件。 |
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) |
已淘汰.
將一或多個指定的 Regex 物件編譯成具有指定屬性的具名元件。 |
備註
注意
在 .NET Core 和 .NET 5+上,呼叫 Regex.CompileToAssembly
方法會擲回 PlatformNotSupportedException。 不支援寫出元件。
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String)
- 來源:
- Regex.cs
- 來源:
- Regex.cs
- 來源:
- Regex.cs
警告
Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.
將一或多個指定的 Regex 物件和指定的資源文件編譯為具有指定屬性的具名元件。
public:
static void CompileToAssembly(cli::array <System::Text::RegularExpressions::RegexCompilationInfo ^> ^ regexinfos, System::Reflection::AssemblyName ^ assemblyname, cli::array <System::Reflection::Emit::CustomAttributeBuilder ^> ^ attributes, System::String ^ resourceFile);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[]? attributes, string? resourceFile);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[]? attributes, string? resourceFile);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[] attributes, string resourceFile);
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName * System.Reflection.Emit.CustomAttributeBuilder[] * string -> unit
[<System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName * System.Reflection.Emit.CustomAttributeBuilder[] * string -> unit
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName, attributes As CustomAttributeBuilder(), resourceFile As String)
參數
- regexinfos
- RegexCompilationInfo[]
陣列,描述要編譯的正則表達式。
- assemblyname
- AssemblyName
元件的檔名。
- attributes
- CustomAttributeBuilder[]
數位,定義要套用至元件的屬性。
- resourceFile
- String
要包含在元件中的 Win32 資源檔案名稱。
- 屬性
例外狀況
assemblyname
或 regexinfos
null
。
resourceFile
參數會指定無效的 Win32 資源檔。
找不到 resourceFile
參數所指定的檔案。
僅限 .NET Core 和 .NET 5+ :不支援建立已編譯正則表達式的元件。
備註
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) 方法會產生 .NET Framework 元件,其中定義於 regexinfos
陣列中的每個正則表達式都會以 類別表示。 一般而言,CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) 方法會從產生已編譯正則表達式元件的個別應用程式呼叫。 元件中包含的每個正則表示式都有下列特性:
其衍生自 Regex 類別。
它會指派其對應 RegexCompilationInfo 物件之
fullnamespace
和name
參數所定義的完整名稱。它有預設的 (或無參數) 建構函式。
一般而言,具現化和使用已編譯正則表達式的程式代碼位於與建立元件之程式代碼分開的元件或應用程式中。
因為 CompileToAssembly 方法會從方法呼叫產生 .NET Framework 元件,而不是使用特定語言的類別定義關鍵詞(例如 C# 中的 class
或 visual Basic 中的 Class
...End Class
),所以不允許使用開發語言的標準屬性語法將 .NET Framework 屬性指派給元件。
attributes
參數提供替代方法,用於定義套用至元件的屬性。 針對您想要套用至元件的每個屬性,請執行下列動作:
建立 Type 物件的陣列,此陣列代表您要呼叫之屬性建構函式的參數類型。
擷取 Type 物件,此物件代表您要套用至新元件的屬性類別。
呼叫屬性 Type 物件的 GetConstructor 方法,以擷取 ConstructorInfo 物件,此物件代表您要呼叫的屬性建構函式。 傳遞 GetConstructor 方法,表示建構函式參數類型的 Type 對象陣列
建立 Object 陣列,定義要傳遞至屬性建構函式的參數。
藉由傳遞在步驟 3 中擷取的 ConstructorInfo 物件,以及步驟 4 中建立的 Object 數位列,來具現化 CustomAttributeBuilder 物件。
然後,您可以將這些 CustomAttributeBuilder 對象的陣列,而不是將 attributes
參數傳遞至 CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) 方法。
給呼叫者的注意事項
如果您要在已安裝 .NET Framework 4.5 或其點版本的系統上進行開發,請以 .NET Framework 4 為目標,並使用 CompileToAssembly(RegexCompilationInfo[], AssemblyName) 方法來建立包含已編譯正則表達式的元件。 嘗試在具有 .NET Framework 4 的系統上,使用該元件的其中一個正則表達式會擲回例外狀況。 若要解決此問題,您可以執行下列任一動作:
在已安裝 .NET Framework 4 而非更新版本的系統上,建置包含已編譯正則表達式的元件。
當您具現化 Regex 物件或呼叫正則表達式模式比對方法時,不要呼叫 CompileToAssembly(RegexCompilationInfo[], AssemblyName) 並從元件擷取編譯的正則表達式,而是使用靜態或實例 Regex 方法搭配 Compiled 選項。
另請參閱
適用於
CompileToAssembly(RegexCompilationInfo[], AssemblyName)
- 來源:
- Regex.cs
- 來源:
- Regex.cs
- 來源:
- Regex.cs
警告
Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.
將一或多個指定的 Regex 物件編譯成具名元件。
public:
static void CompileToAssembly(cli::array <System::Text::RegularExpressions::RegexCompilationInfo ^> ^ regexinfos, System::Reflection::AssemblyName ^ assemblyname);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname);
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName -> unit
[<System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName -> unit
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName)
參數
- regexinfos
- RegexCompilationInfo[]
陣列,描述要編譯的正則表達式。
- assemblyname
- AssemblyName
元件的檔名。
- 屬性
例外狀況
assemblyname
或 regexinfos
null
。
僅限 .NET Core 和 .NET 5+ :不支援建立已編譯正則表達式的元件。
範例
下列範例會建立名為 RegexLib.dll的元件。 元件包含兩個編譯的正則表達式。 第一個,Utilities.RegularExpressions.DuplicatedString
,比對兩個相同的連續單字。 第二個 Utilities.RegularExpressions.EmailAddress
,會檢查字串的格式是否為電子郵件位址。
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text.RegularExpressions;
public class RegexCompilationTest
{
public static void Main()
{
RegexCompilationInfo expr;
List<RegexCompilationInfo> compilationList = new List<RegexCompilationInfo>();
// Define regular expression to detect duplicate words
expr = new RegexCompilationInfo(@"\b(?<word>\w+)\s+(\k<word>)\b",
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant,
"DuplicatedString",
"Utilities.RegularExpressions",
true);
// Add info object to list of objects
compilationList.Add(expr);
// Define regular expression to validate format of email address
expr = new RegexCompilationInfo(@"^(?("")(""[^""]+?""@)|(([0-9A-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9A-Z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9A-Z][-\w]*[0-9A-Z]\.)+[A-Z]{2,6}))$",
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant,
"EmailAddress",
"Utilities.RegularExpressions",
true);
// Add info object to list of objects
compilationList.Add(expr);
// Generate assembly with compiled regular expressions
RegexCompilationInfo[] compilationArray = new RegexCompilationInfo[compilationList.Count];
AssemblyName assemName = new AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null");
compilationList.CopyTo(compilationArray);
Regex.CompileToAssembly(compilationArray, assemName);
}
}
Imports System.Collections.Generic
Imports System.Reflection
Imports System.Text.RegularExpressions
Module RegexCompilationTest
Public Sub Main()
Dim expr As RegexCompilationInfo
Dim compilationList As New List(Of RegexCompilationInfo)
' Define regular expression to detect duplicate words
expr = New RegexCompilationInfo("\b(?<word>\w+)\s+(\k<word>)\b", _
RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant, _
"DuplicatedString", _
"Utilities.RegularExpressions", _
True)
' Add info object to list of objects
compilationList.Add(expr)
' Define regular expression to validate format of email address
expr = New RegexCompilationInfo("^(?("")(""[^""]+?""@)|(([0-9A-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9A-Z])@))" + _
"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9A-Z][-\w]*[0-9A-Z]\.)+[A-Z]{2,6}))$", _
RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant, _
"EmailAddress", _
"Utilities.RegularExpressions", _
True)
' Add info object to list of objects
compilationList.Add(expr)
' Generate assembly with compiled regular expressions
Dim compilationArray(compilationList.Count - 1) As RegexCompilationInfo
Dim assemName As New AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null")
compilationList.CopyTo(compilationArray)
Regex.CompileToAssembly(compilationArray, assemName)
End Sub
End Module
然後,下列範例會具現化並使用檢查字串是否有重複單字的正則表達式。
using System;
using Utilities.RegularExpressions;
public class CompiledRegexUsage
{
public static void Main()
{
string text = "The the quick brown fox fox jumps over the lazy dog dog.";
DuplicatedString duplicateRegex = new DuplicatedString();
if (duplicateRegex.Matches(text).Count > 0)
Console.WriteLine("There are {0} duplicate words in \n '{1}'",
duplicateRegex.Matches(text).Count, text);
else
Console.WriteLine("There are no duplicate words in \n '{0}'",
text);
}
}
// The example displays the following output to the console:
// There are 3 duplicate words in
// 'The the quick brown fox fox jumps over the lazy dog dog.'
Imports Utilities.RegularExpressions
Module CompiledRegexUsage
Public Sub Main()
Dim text As String = "The the quick brown fox fox jumps over the lazy dog dog."
Dim duplicateRegex As New DuplicatedString()
If duplicateRegex.Matches(text).Count > 0 Then
Console.WriteLine("There are {0} duplicate words in {2} '{1}'", _
duplicateRegex.Matches(text).Count, text, vbCrLf)
Else
Console.WriteLine("There are no duplicate words in {1} '{0}'", _
text, vbCrLf)
End If
End Sub
End Module
' The example displays the following output to the console:
' There are 3 duplicate words in
' 'The the quick brown fox fox jumps over the lazy dog dog.'
成功編譯此第二個範例需要將參考加入至專案 RegexLib.dll(第一個範例所建立的元件)。
備註
CompileToAssembly(RegexCompilationInfo[], AssemblyName) 方法會產生 .NET Framework 元件,其中定義於 regexinfos
陣列中的每個正則表達式都會以 類別表示。 一般而言,CompileToAssembly(RegexCompilationInfo[], AssemblyName) 方法會從產生已編譯正則表達式元件的個別應用程式呼叫。 元件中包含的每個正則表示式都有下列特性:
其衍生自 Regex 類別。
它會指派其對應 RegexCompilationInfo 物件之
fullnamespace
和name
參數所定義的完整名稱。它有預設的 (或無參數) 建構函式。
一般而言,具現化和使用已編譯正則表達式的程式代碼位於與建立元件之程式代碼分開的元件或應用程式中。
給呼叫者的注意事項
如果您要在已安裝 .NET Framework 4.5 或其點版本的系統上進行開發,請以 .NET Framework 4 為目標,並使用 CompileToAssembly(RegexCompilationInfo[], AssemblyName) 方法來建立包含已編譯正則表達式的元件。 嘗試在具有 .NET Framework 4 的系統上,使用該元件的其中一個正則表達式會擲回例外狀況。 若要解決此問題,您可以執行下列任一動作:
在已安裝 .NET Framework 4 而非更新版本的系統上,建置包含已編譯正則表達式的元件。
當您具現化 Regex 物件或呼叫正則表達式模式比對方法時,不要呼叫 CompileToAssembly(RegexCompilationInfo[], AssemblyName) 並從元件擷取編譯的正則表達式,而是使用靜態或實例 Regex 方法搭配 Compiled 選項。
另請參閱
適用於
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[])
- 來源:
- Regex.cs
- 來源:
- Regex.cs
- 來源:
- Regex.cs
警告
Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.
將一或多個指定的 Regex 物件編譯成具有指定屬性的具名元件。
public:
static void CompileToAssembly(cli::array <System::Text::RegularExpressions::RegexCompilationInfo ^> ^ regexinfos, System::Reflection::AssemblyName ^ assemblyname, cli::array <System::Reflection::Emit::CustomAttributeBuilder ^> ^ attributes);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[]? attributes);
[System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[]? attributes);
public static void CompileToAssembly (System.Text.RegularExpressions.RegexCompilationInfo[] regexinfos, System.Reflection.AssemblyName assemblyname, System.Reflection.Emit.CustomAttributeBuilder[] attributes);
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName * System.Reflection.Emit.CustomAttributeBuilder[] -> unit
[<System.Obsolete("Regex.CompileToAssembly is obsolete and not supported. Use the GeneratedRegexAttribute with the regular expression source generator instead.", DiagnosticId="SYSLIB0036", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member CompileToAssembly : System.Text.RegularExpressions.RegexCompilationInfo[] * System.Reflection.AssemblyName * System.Reflection.Emit.CustomAttributeBuilder[] -> unit
Public Shared Sub CompileToAssembly (regexinfos As RegexCompilationInfo(), assemblyname As AssemblyName, attributes As CustomAttributeBuilder())
參數
- regexinfos
- RegexCompilationInfo[]
陣列,描述要編譯的正則表達式。
- assemblyname
- AssemblyName
元件的檔名。
- attributes
- CustomAttributeBuilder[]
數位,定義要套用至元件的屬性。
- 屬性
例外狀況
assemblyname
或 regexinfos
null
。
僅限 .NET Core 和 .NET 5+ :不支援建立已編譯正則表達式的元件。
範例
下列範例會建立名為 RegexLib.dll 的元件,並將 AssemblyTitleAttribute 屬性套用至該元件。 元件包含兩個編譯的正則表達式。 第一個,Utilities.RegularExpressions.DuplicatedString
,比對兩個相同的連續單字。 第二個 Utilities.RegularExpressions.EmailAddress
,會檢查字串的格式是否為電子郵件位址。
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using System.Text.RegularExpressions;
public class RegexCompilationTest
{
public static void Main()
{
RegexCompilationInfo expr;
List<RegexCompilationInfo> compilationList = new List<RegexCompilationInfo>();
// Define regular expression to detect duplicate words
expr = new RegexCompilationInfo(@"\b(?<word>\w+)\s+(\k<word>)\b",
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant,
"DuplicatedString",
"Utilities.RegularExpressions",
true);
// Add info object to list of objects
compilationList.Add(expr);
// Define regular expression to validate format of email address
expr = new RegexCompilationInfo(@"^(?("")(""[^""]+?""@)|(([0-9A-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9A-Z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9A-Z][-\w]*[0-9A-Z]\.)+[zA-Z]{2,6}))$",
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant,
"EmailAddress",
"Utilities.RegularExpressions",
true);
// Add info object to list of objects
compilationList.Add(expr);
// Apply AssemblyTitle attribute to the new assembly
//
// Define the parameter(s) of the AssemblyTitle attribute's constructor
Type[] parameters = { typeof(string) };
// Define the assembly's title
object[] paramValues = { "General-purpose library of compiled regular expressions" };
// Get the ConstructorInfo object representing the attribute's constructor
ConstructorInfo ctor = typeof(System.Reflection.AssemblyTitleAttribute).GetConstructor(parameters);
// Create the CustomAttributeBuilder object array
CustomAttributeBuilder[] attBuilder = { new CustomAttributeBuilder(ctor, paramValues) };
// Generate assembly with compiled regular expressions
RegexCompilationInfo[] compilationArray = new RegexCompilationInfo[compilationList.Count];
AssemblyName assemName = new AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null");
compilationList.CopyTo(compilationArray);
Regex.CompileToAssembly(compilationArray, assemName, attBuilder);
}
}
Imports System.Collections.Generic
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Text.RegularExpressions
Module RegexCompilationTest
Public Sub Main()
Dim expr As RegexCompilationInfo
Dim compilationList As New List(Of RegexCompilationInfo)
' Define regular expression to detect duplicate words
expr = New RegexCompilationInfo("\b(?<word>\w+)\s+(\k<word>)\b", _
RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant, _
"DuplicatedString", _
"Utilities.RegularExpressions", _
True)
' Add info object to list of objects
compilationList.Add(expr)
' Define regular expression to validate format of email address
expr = New RegexCompilationInfo("^(?("")(""[^""]+?""@)|(([0-9A-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9A-Z])@))" + _
"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9A-Z][-\w]*[0-9A-Z]\.)+[A-Z]{2,6}))$", _
RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant, _
"EmailAddress", _
"Utilities.RegularExpressions", _
True)
' Add info object to list of objects
compilationList.Add(expr)
' Apply AssemblyTitle attribute to the new assembly
'
' Define the parameter(s) of the AssemblyTitle attribute's constructor
Dim params() As Type = { GetType(String) }
' Define the assembly's title
Dim paramValues() As Object = { "General-purpose library of compiled regular expressions" }
' Get the ConstructorInfo object representing the attribute's constructor
Dim ctor As ConstructorInfo = GetType(System.Reflection.AssemblyTitleAttribute).GetConstructor(params)
' Create the CustomAttributeBuilder object array
Dim attBuilder() As CustomAttributeBuilder = { New CustomAttributeBuilder(ctor, paramValues) }
' Generate assembly with compiled regular expressions
Dim compilationArray(compilationList.Count - 1) As RegexCompilationInfo
Dim assemName As New AssemblyName("RegexLib, Version=1.0.0.1001, Culture=neutral, PublicKeyToken=null")
compilationList.CopyTo(compilationArray)
Regex.CompileToAssembly(compilationArray, assemName, attBuilder)
End Sub
End Module
您可以使用 ILDasm 等反映公用程式檢查 AssemblyTitleAttribute 屬性已套用至元件。
然後,下列範例會具現化並使用檢查字串是否有重複單字的正則表達式。
using System;
using Utilities.RegularExpressions;
public class CompiledRegexUsage
{
public static void Main()
{
string text = "The the quick brown fox fox jumps over the lazy dog dog.";
DuplicatedString duplicateRegex = new DuplicatedString();
if (duplicateRegex.Matches(text).Count > 0)
Console.WriteLine("There are {0} duplicate words in \n '{1}'",
duplicateRegex.Matches(text).Count, text);
else
Console.WriteLine("There are no duplicate words in \n '{0}'",
text);
}
}
// The example displays the following output to the console:
// There are 3 duplicate words in
// 'The the quick brown fox fox jumps over the lazy dog dog.'
Imports Utilities.RegularExpressions
Module CompiledRegexUsage
Public Sub Main()
Dim text As String = "The the quick brown fox fox jumps over the lazy dog dog."
Dim duplicateRegex As New DuplicatedString()
If duplicateRegex.Matches(text).Count > 0 Then
Console.WriteLine("There are {0} duplicate words in {2} '{1}'", _
duplicateRegex.Matches(text).Count, text, vbCrLf)
Else
Console.WriteLine("There are no duplicate words in {1} '{0}'", _
text, vbCrLf)
End If
End Sub
End Module
' The example displays the following output to the console:
' There are 3 duplicate words in
' 'The the quick brown fox fox jumps over the lazy dog dog.'
成功編譯此第二個範例需要將參考加入至專案 RegexLib.dll(第一個範例所建立的元件)。
備註
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) 方法會產生 .NET Framework 元件,其中定義於 regexinfos
陣列中的每個正則表達式都會以 類別表示。 一般而言,CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) 方法會從產生已編譯正則表達式元件的個別應用程式呼叫。 元件中包含的每個正則表示式都有下列特性:
其衍生自 Regex 類別。
它會指派其對應 RegexCompilationInfo 物件之
fullnamespace
和name
參數所定義的完整名稱。它有預設的 (或無參數) 建構函式。
一般而言,具現化和使用已編譯正則表達式的程式代碼位於與建立元件之程式代碼分開的元件或應用程式中。
因為 CompileToAssembly 方法會從方法呼叫產生 .NET Framework 元件,而不是使用特定語言的類別定義關鍵詞(例如 C# 中的 class
或 visual Basic 中的 Class
...End Class
),所以不允許使用開發語言的標準屬性語法將 .NET Framework 屬性指派給元件。
attributes
參數提供替代方法,用於定義套用至元件的屬性。 針對您想要套用至元件的每個屬性,請執行下列動作:
建立 Type 物件的陣列,此陣列代表您要呼叫之屬性建構函式的參數類型。
擷取 Type 物件,此物件代表您要套用至新元件的屬性類別。
呼叫屬性 Type 物件的 GetConstructor 方法,以擷取 ConstructorInfo 物件,此物件代表您要呼叫的屬性建構函式。 傳遞 GetConstructor 方法,這個數位 Type 物件,代表建構函式的參數類型。
建立 Object 陣列,定義要傳遞至屬性建構函式的參數。
藉由傳遞在步驟 3 中擷取的 ConstructorInfo 物件,以及步驟 4 中建立的 Object 數位列,來具現化 CustomAttributeBuilder 物件。
然後,您可以將這些 CustomAttributeBuilder 對象的陣列,而不是將 attributes
參數傳遞至 Regex.CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) 方法。
給呼叫者的注意事項
如果您要在已安裝 .NET Framework 4.5 或其點版本的系統上進行開發,請以 .NET Framework 4 為目標,並使用 CompileToAssembly(RegexCompilationInfo[], AssemblyName) 方法來建立包含已編譯正則表達式的元件。 嘗試在具有 .NET Framework 4 的系統上,使用該元件的其中一個正則表達式會擲回例外狀況。 若要解決此問題,您可以執行下列任一動作:
在已安裝 .NET Framework 4 而非更新版本的系統上,建置包含已編譯正則表達式的元件。
當您具現化 Regex 物件或呼叫正則表達式模式比對方法時,不要呼叫 CompileToAssembly(RegexCompilationInfo[], AssemblyName) 並從元件擷取編譯的正則表達式,而是使用靜態或實例 Regex 方法搭配 Compiled 選項。