Поделиться через


RegexCompilationInfo Конструкторы

Определение

Инициализирует новый экземпляр класса RegexCompilationInfo.

Перегрузки

RegexCompilationInfo(String, RegexOptions, String, String, Boolean)

Инициализирует новый экземпляр класса RegexCompilationInfo, содержащего сведения о регулярном выражении, которое должно быть включено в сборку.

RegexCompilationInfo(String, RegexOptions, String, String, Boolean, TimeSpan)

Инициализирует новый экземпляр класса RegexCompilationInfo, содержащего сведения о регулярном выражении с указанным значение времени ожидания, которое должно быть включено в сборку.

RegexCompilationInfo(String, RegexOptions, String, String, Boolean)

Исходный код:
RegexCompilationInfo.cs
Исходный код:
RegexCompilationInfo.cs
Исходный код:
RegexCompilationInfo.cs

Инициализирует новый экземпляр класса RegexCompilationInfo, содержащего сведения о регулярном выражении, которое должно быть включено в сборку.

public:
 RegexCompilationInfo(System::String ^ pattern, System::Text::RegularExpressions::RegexOptions options, System::String ^ name, System::String ^ fullnamespace, bool ispublic);
public RegexCompilationInfo (string pattern, System.Text.RegularExpressions.RegexOptions options, string name, string fullnamespace, bool ispublic);
new System.Text.RegularExpressions.RegexCompilationInfo : string * System.Text.RegularExpressions.RegexOptions * string * string * bool -> System.Text.RegularExpressions.RegexCompilationInfo
Public Sub New (pattern As String, options As RegexOptions, name As String, fullnamespace As String, ispublic As Boolean)

Параметры

pattern
String

Регулярное выражение для компилирования.

options
RegexOptions

Параметры регулярного выражения для использования при компилировании регулярного выражения.

name
String

Имя типа, представляющего скомпилированное регулярное выражение.

fullnamespace
String

Пространство имен, к которому принадлежит новый тип.

ispublic
Boolean

Значение true, чтобы сделать скомпилированное регулярное выражение видимым для всех, иначе значение false.

Исключения

name имеет значение Empty.

pattern имеет значение null.

-или-

name имеет значение null.

-или-

fullnamespace имеет значение null.

Примеры

В следующем примере создается и используется скомпилированное регулярное выражение в двух шагах.

На первом шаге скомпилируйте и выполните следующий пример кода. Конструктор RegexCompilationInfo в примере кода определяет скомпилированное регулярное выражение. Результатом выполнения кода является сборка с именем FishRegex.dll, которая содержит скомпилированный тип регулярного выражения с именем FishRegex.

// This code example demonstrates the RegexCompilationInfo constructor
// and the Regex.CompileToAssembly() method.
// compile: csc genFishRegex.cs

namespace MyApp
{
    using System;
    using System.Reflection;
    using System.Text.RegularExpressions;
    class GenFishRegEx
    {
        public static void Main()
        {
// Pattern = Group matches one or more word characters,
//           one or more white space characters,
//           group matches the string "fish".
        string pat = @"(\w+)\s+(fish)";

// Create the compilation information.
// Case-insensitive matching; type name = "FishRegex";
// namespace = "MyApp"; type is public.
        RegexCompilationInfo rci = new RegexCompilationInfo(
                    pat, RegexOptions.IgnoreCase,
                    "FishRegex", "MyApp", true);

// Setup to compile.
        AssemblyName an = new AssemblyName();
        an.Name = "FishRegex";
        RegexCompilationInfo[] rciList = { rci };

// Compile the regular expression.
        Regex.CompileToAssembly(rciList, an);
        }
    }
}
' This code example demonstrates the RegexCompilationInfo constructor
' and the Regex.CompileToAssembly() method.
' compile: csc genFishRegex.cs

Imports System.Reflection
Imports System.Text.RegularExpressions

Class GenFishRegEx
    Public Shared Sub Main() 
        ' Pattern = Group matches one or more word characters, 
        '           one or more white space characters, 
        '           group matches the string "fish".
        Dim pat As String = "(\w+)\s+(fish)"
        
        ' Create the compilation information.
        ' Case-insensitive matching; type name = "FishRegex"; 
        ' namespace = "MyApp"; type is public.
        Dim rci As New RegexCompilationInfo(pat, RegexOptions.IgnoreCase, _
                                            "FishRegex", "MyApp", True)
        
        ' Setup to compile.
        Dim an As New AssemblyName()
        an.Name = "FishRegex"
        Dim rciList As RegexCompilationInfo() = New RegexCompilationInfo() { rci }
        
        ' Compile the regular expression.
        Regex.CompileToAssembly(rciList, an)
    
    End Sub
End Class

На втором шаге скомпилируйте следующий пример кода, используя ссылку на FishRegex.dll, а затем запустите полученный исполняемый файл. Исполняемый файл соответствует целевой строке с помощью FishRegex типа и отображает совпадение, группу, группу записи и позицию индекса совпадений в целевой строке.

// This code example demonstrates the RegexCompilationInfo constructor.
// Execute this code example after executing genFishRegex.exe.
// compile: csc /r:FishRegex.dll useFishRegex.cs

namespace MyApp
  {
  using System;
  using System.Reflection;
  using System.Text.RegularExpressions;

  class UseFishRegEx
    {
    public static void Main()
      {
// Match against the following target string.
      string targetString = "One fish two fish red fish blue fish";
      int matchCount = 0;
      FishRegex f = new FishRegex();

// Display the target string.
      Console.WriteLine("\nInput string = \"" + targetString + "\"");

// Display each match, capture group, capture, and match position.
      foreach (Match m in f.Matches(targetString))
    {
    Console.WriteLine("\nMatch(" + (++matchCount) + ")");
    for (int i = 1; i <= 2; i++)
      {
      Group g = m.Groups[i];
      Console.WriteLine("Group(" + i + ") = \"" + g + "\"");
      CaptureCollection cc = g.Captures;
      for (int j = 0; j < cc.Count; j++)
        {
        Capture c = cc[j];
        System.Console.WriteLine(
          "Capture(" + j + ") = \"" + c + "\", Position = " + c.Index);
        }
      }
    }
      }
    }
  }

/*
This code example produces the following results:

Input string = "One fish two fish red fish blue fish"

Match(1)
Group(1) = "One"
Capture(0) = "One", Position = 0
Group(2) = "fish"
Capture(0) = "fish", Position = 4

Match(2)
Group(1) = "two"
Capture(0) = "two", Position = 9
Group(2) = "fish"
Capture(0) = "fish", Position = 13

Match(3)
Group(1) = "red"
Capture(0) = "red", Position = 18
Group(2) = "fish"
Capture(0) = "fish", Position = 22

Match(4)
Group(1) = "blue"
Capture(0) = "blue", Position = 27
Group(2) = "fish"
Capture(0) = "fish", Position = 32

*/
' This code example demonstrates the RegexCompilationInfo constructor.
' Execute this code example after executing genFishRegex.exe.
' compile: vbc /r:FishRegex.dll useFishRegex.vb

Imports System.Reflection
Imports System.Text.RegularExpressions

Class UseFishRegEx
    Public Shared Sub Main() 
        ' Match against the following target string.
        Dim targetString As String = "One fish two fish red fish blue fish"
        Dim matchCount As Integer = 0
        Dim f As New MyApp.FishRegex()
        
        ' Display the target string.
        Console.WriteLine(vbLf & "Input string = """ & targetString & """")
        
        ' Display each match, capture group, capture, and match position.
        Dim m As Match
        For Each m In f.Matches(targetString)
            matchCount = matchCount + 1
            Console.WriteLine(vbLf & "Match(" & matchCount & ")")

            Dim i As Integer
            For i = 1 to 2
                Dim g As Group = m.Groups(i)
                Console.WriteLine("Group(" & i & ") = """ & g.ToString() & """")
                Dim cc As CaptureCollection = g.Captures
                Dim j As Integer
                For j = 0 To cc.Count-1
                    Dim c As Capture = cc(j)
                    System.Console.WriteLine("Capture(" & j & ") = """ & c.ToString() & _
                                             """, Position = " & c.Index)
                Next j
            Next i
        Next m
    End Sub
End Class

'
'This code example produces the following results:
'
'Input string = "One fish two fish red fish blue fish"
'
'Match(1)
'Group(1) = "One"
'Capture(0) = "One", Position = 0
'Group(2) = "fish"
'Capture(0) = "fish", Position = 4
'
'Match(2)
'Group(1) = "two"
'Capture(0) = "two", Position = 9
'Group(2) = "fish"
'Capture(0) = "fish", Position = 13
'
'Match(3)
'Group(1) = "red"
'Capture(0) = "red", Position = 18
'Group(2) = "fish"
'Capture(0) = "fish", Position = 22
'
'Match(4)
'Group(1) = "blue"
'Capture(0) = "blue", Position = 27
'Group(2) = "fish"
'Capture(0) = "fish", Position = 32
'

Комментарии

Каждый параметр конструктора RegexCompilationInfo(String, RegexOptions, String, String, Boolean) напрямую соответствует свойству RegexCompilationInfo класса . Так как все свойства считываются и записываются, их значения также можно назначать напрямую.

Метод CompileToAssembly создает сборку, содержащую скомпилированные регулярные выражения. Поэтому не следует указывать Compiled в качестве одного из значений options.

Если ispublic имеет значение true, скомпилированному классу регулярных выражений предоставляется открытый доступ. То есть его можно создать из кода, который выполняется в любой сборке. Если ispublic имеет значение false, скомпилированному классу регулярного выражения предоставляется internal (в C#) или Friend (в Visual Basic) специальные возможности. То есть его можно создать только из кода, который выполняется в той же сборке, что и класс регулярного выражения.

Примечания для тех, кто вызывает этот метод

Этот конструктор создает скомпилированное регулярное выражение, которое использует значение времени ожидания по умолчанию для домена приложения, в котором оно создано. Если для домена приложения определено значение времени ожидания, скомпилированное регулярное выражение использует значение InfiniteMatchTimeout, которое предотвращает истечение времени ожидания операции сопоставления шаблонов. Рекомендуемый конструктор для создания скомпилированного регулярного выражения — , RegexCompilationInfo(String, RegexOptions, String, String, Boolean, TimeSpan)который позволяет задать интервал времени ожидания.

Применяется к

RegexCompilationInfo(String, RegexOptions, String, String, Boolean, TimeSpan)

Исходный код:
RegexCompilationInfo.cs
Исходный код:
RegexCompilationInfo.cs
Исходный код:
RegexCompilationInfo.cs

Инициализирует новый экземпляр класса RegexCompilationInfo, содержащего сведения о регулярном выражении с указанным значение времени ожидания, которое должно быть включено в сборку.

public:
 RegexCompilationInfo(System::String ^ pattern, System::Text::RegularExpressions::RegexOptions options, System::String ^ name, System::String ^ fullnamespace, bool ispublic, TimeSpan matchTimeout);
public RegexCompilationInfo (string pattern, System.Text.RegularExpressions.RegexOptions options, string name, string fullnamespace, bool ispublic, TimeSpan matchTimeout);
new System.Text.RegularExpressions.RegexCompilationInfo : string * System.Text.RegularExpressions.RegexOptions * string * string * bool * TimeSpan -> System.Text.RegularExpressions.RegexCompilationInfo
Public Sub New (pattern As String, options As RegexOptions, name As String, fullnamespace As String, ispublic As Boolean, matchTimeout As TimeSpan)

Параметры

pattern
String

Регулярное выражение для компилирования.

options
RegexOptions

Параметры регулярного выражения для использования при компилировании регулярного выражения.

name
String

Имя типа, представляющего скомпилированное регулярное выражение.

fullnamespace
String

Пространство имен, к которому принадлежит новый тип.

ispublic
Boolean

Значение true, чтобы сделать скомпилированное регулярное выражение видимым для всех, иначе значение false.

matchTimeout
TimeSpan

Интервал времени ожидания по умолчанию для регулярного выражения.

Исключения

name имеет значение Empty.

pattern имеет значение null.

-или-

name имеет значение null.

-или-

fullnamespace имеет значение null.

Значение параметра matchTimeout отрицательное, равно нулю или больше, чем приблизительно 24 дня.

Примеры

В следующем примере определяется одно скомпилированное регулярное выражение с именем DuplicateChars , которое идентифицирует два или более вхождения одного и того же символа во входной строке. Время ожидания скомпилированного регулярного выражения по умолчанию составляет 2 секунды. При выполнении примера создается библиотека классов с именем RegexLib.dll, содержащая скомпилированное регулярное выражение.

using System;
using System.Reflection;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
        // Match two or more occurrences of the same character.
        string pattern = @"(\w)\1+";
        
        // Use case-insensitive matching. 
        var rci = new RegexCompilationInfo(pattern, RegexOptions.IgnoreCase,
                                           "DuplicateChars", "CustomRegexes", 
                                           true, TimeSpan.FromSeconds(2));

        // Define an assembly to contain the compiled regular expression.
        var an = new AssemblyName();
        an.Name = "RegexLib";
        RegexCompilationInfo[] rciList = { rci };

        // Compile the regular expression and create the assembly.
        Regex.CompileToAssembly(rciList, an);
   }
}
Imports System.Reflection
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
        ' Match two or more occurrences of the same character.
        Dim pattern As String = "(\w)\1+"
        
        ' Use case-insensitive matching. 
        Dim rci As New RegexCompilationInfo(pattern, RegexOptions.IgnoreCase,
                                            "DuplicateChars", "CustomRegexes", 
                                            True, TimeSpan.FromSeconds(2))

        ' Define an assembly to contain the compiled regular expression.
        Dim an As New AssemblyName()
        an.Name = "RegexLib"
        Dim rciList As RegexCompilationInfo() = New RegexCompilationInfo() { rci }

        ' Compile the regular expression and create the assembly.
        Regex.CompileToAssembly(rciList, an)
   End Sub
End Module

Шаблон регулярного выражения (\w)\1+ определяется, как показано в следующей таблице.

Шаблон Описание
(\w) Сопоставите любой символ слова и назначьте его первой захватываемой группе.
\1+ Сопоставление одного или нескольких вхождений значения первой захваченной группы.

В следующем примере регулярное DuplicatedChars выражение используется для идентификации повторяющихся символов в строковом массиве. При вызове конструктора DuplicatedChars интервал времени ожидания изменяется на 0,5 секунды.

using CustomRegexes;
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      var rgx = new DuplicateChars(TimeSpan.FromSeconds(.5));
      
      string[] values = { "Greeeeeat", "seed", "deed", "beam", 
                          "loop", "Aardvark" };
      // Display regex information.
      Console.WriteLine("Regular Expression Pattern: {0}", rgx);
      Console.WriteLine("Regex timeout value: {0} seconds\n", 
                        rgx.MatchTimeout.TotalSeconds);
      
      // Display matching information.
      foreach (var value in values) {
         Match m = rgx.Match(value);
         if (m.Success)
            Console.WriteLine("'{0}' found in '{1}' at positions {2}-{3}",
                              m.Value, value, m.Index, m.Index + m.Length - 1);
         else
            Console.WriteLine("No match found in '{0}'", value);
      }                                                         
   }
}
// The example displays the following output:
//       Regular Expression Pattern: (\w)\1+
//       Regex timeout value: 0.5 seconds
//       
//       //eeeee// found in //Greeeeeat// at positions 2-6
//       //ee// found in //seed// at positions 1-2
//       //ee// found in //deed// at positions 1-2
//       No match found in //beam//
//       //oo// found in //loop// at positions 1-2
//       //Aa// found in //Aardvark// at positions 0-1
Imports CustomRegexes
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim rgx As New DuplicateChars(TimeSpan.FromSeconds(.5))
      
      Dim values() As String = { "Greeeeeat", "seed", "deed", "beam", 
                                 "loop", "Aardvark" }
      ' Display regex information.
      Console.WriteLine("Regular Expression Pattern: {0}", rgx)
      Console.WriteLine("Regex timeout value: {0} seconds", 
                        rgx.MatchTimeout.TotalSeconds)
      Console.WriteLine()
      
      ' Display matching information.
      For Each value In values
         Dim m As Match = rgx.Match(value)
         If m.Success Then
            Console.WriteLine("'{0}' found in '{1}' at positions {2}-{3}",
                              m.Value, value, m.Index, m.Index + m.Length - 1)
         Else
            Console.WriteLine("No match found in '{0}'", value)
         End If   
      Next                                                         
   End Sub
End Module
' The example displays the following output:
'       Regular Expression Pattern: (\w)\1+
'       Regex timeout value: 0.5 seconds
'       
'       'eeeee' found in 'Greeeeeat' at positions 2-6
'       'ee' found in 'seed' at positions 1-2
'       'ee' found in 'deed' at positions 1-2
'       No match found in 'beam'
'       'oo' found in 'loop' at positions 1-2
'       'Aa' found in 'Aardvark' at positions 0-1

Комментарии

Каждый параметр конструктора RegexCompilationInfo(String, RegexOptions, String, String, Boolean) напрямую соответствует свойству RegexCompilationInfo класса . Так как все свойства считываются и записываются, их значения также можно назначать напрямую.

Метод CompileToAssembly создает сборку, содержащую скомпилированные регулярные выражения. Поэтому не следует указывать Compiled в качестве одного из значений options.

Если ispublic имеет значение true, скомпилированному классу регулярных выражений предоставляется открытый доступ. То есть его можно создать из кода, который выполняется в любой сборке. Если ispublic имеет значение false, скомпилированному классу регулярного выражения предоставляется internal (в C#) или Friend (в Visual Basic) специальные возможности. То есть его можно создать только из кода, который выполняется в той же сборке, что и класс регулярного выражения.

Параметр matchTimeout определяет интервал времени ожидания по умолчанию для скомпилированного регулярного выражения. Это значение представляет приблизительное количество времени, за которое скомпилированный объект регулярного выражения будет выполнять одну операцию сопоставления до истечения времени ожидания операции, а обработчик регулярных выражений создает исключение во время следующего RegexMatchTimeoutException проверка времени. Дополнительные сведения о значении времени ожидания см. в свойстве MatchTimeout .

Важно!

Рекомендуется всегда задавать значение времени ожидания по умолчанию для скомпилированного регулярного выражения. Потребители библиотеки регулярных выражений могут переопределить это значение времени ожидания, передавая TimeSpan значение, представляющее новый интервал времени ожидания, в перегрузку конструктора.

См. также раздел

Применяется к