(0) exportieren Drucken
Alle erweitern

DirectiveRegex-Klasse

Aktualisiert: November 2007

Stellt einen regulären Ausdruck zum Analysieren einer ASP.NET-Direktive bereit.

Namespace:  System.Web.RegularExpressions
Assembly:  System.Web.RegularExpressions (in System.Web.RegularExpressions.dll)

public class DirectiveRegex : Regex, 
	ISerializable
public class DirectiveRegex extends Regex implements ISerializable
public class DirectiveRegex extends Regex implements ISerializable

Die DirectiveRegex-Klasse stellt einen kompilierten regulären Ausdruck zum Analysieren einer ASP.NET-Direktive (<%@%>) bereit.

xwz34zt8.alert_note(de-de,VS.90).gifHinweis:

Die System.Web.RegularExpressions-Klassen sind für die Verwendung durch .NET Framework zum Analysieren von ASP.NET-Seiten vorgesehen und nicht immer für allgemeine Anwendungen geeignet. Beispielsweise prüfen viele dieser Klassen nur auf Übereinstimmung mit dem Anfang einer Zeichenfolge.

Das von der DirectiveRegex-Klasse verwendete vordefinierte Muster für reguläre Ausdrücke ist \G<%\s*@(\s*(?<attrname>\w[\w:]*(?=\W))(\s*(?<equal>=)\s*"(?<attrval>[^"]*)"|\s*(?<equal>=)\s*'(?<attrval>[^']*)'|\s*(?<equal>=)\s*(?<attrval>[^\s%>]*)|(?<equal>)(?<attrval>\s*?)))*\s*?%>. Dieser reguläre Ausdruck gibt eine vollständige ASP.NET-Direktive einschließlich der Anfangs- und Endtags sowie des gesamten Inhalts zurück. Bei der Suche nach Übereinstimmungen von Anfangstags werden Leerräume zwischen den Zeichen % und @ ignoriert. Damit jedoch eine Übereinstimmung auftritt, muss die Direktive am Anfang des Eingabestreams beginnen. Damit mehrere Direktiven in einem Aufruf der Matches-Methode des AspCodeRegex-Objekts gefunden werden können, müssen diese zusammenhängen. Das heißt, dem %>-Tag, das den vorangegangenen Inlinecodeblock beendet, muss unmittelbar das <%@-Tag folgen, das den nächsten Inlinecodeblock beginnt, ohne dass Leerräume oder Zeilenumbrüche dazwischen steht.

Alle ASP.NET-Direktiven können unabhängig von dazwischen stehenden Leerräumen oder Zeilenumbrüchen auf eine der beiden folgenden Weisen abgerufen werden:

  • Durch Instanziieren eines Regex-Objekts, dessen Muster für reguläre Ausdrücke <%\s*@(\s*(?<attrname>\w[\w:]*(?=\W))(\s*(?<equal>=)\s*"(?<attrval>[^"]*)"|\s*(?<equal>=)\s*'(?<attrval>[^']*)'|\s*(?<equal>=)\s*(?<attrval>[^\s%>]*)|(?<equal>)(?<attrval>\s*?)))*\s*?%> ist.

  • Durch Aufrufen der String.IndexOf(String, Int32)-Methode zum Suchen des nächsten Auftretens einer Direktive in einer Zeichenfolge und durch anschließendes Verwenden dieser Position beim Aufrufen der Match(String, Int32)-Methode des DirectiveRegex-Objekts. Im folgenden Beispiel wird veranschaulicht, wie dieses Verfahren mit dem DirectiveRegex-Objekt verwendet wird, um alle ASP.NET-Direktiven in einer Zeichenfolge zu extrahieren.

    StreamReader sr = new StreamReader(@".\Directives.txt"); 
    string directives = sr.ReadToEnd();
    DirectiveRegex dirRegex = new DirectiveRegex();
    
    int position = 0;
    List<Match> matches = new List<Match>();
    
    do
    { 
       // Get next occurrence of beginning code block tag
       position = directives.IndexOf("<%", position);
       // If it exists, pass this portion of string to regex engine
       if (position > -1)
       { 
          Match match = dirRegex.Match(directives, position);
          // Add successful match to collection
          if (match.Success)
          {
             matches.Add(match);
             position = match.Index + 1;
          }
          else
          {
             position++;
          }
       }   
    } while (position > -1);
    
    // Iterate collection of matches
    foreach (Match match in matches)
       Console.WriteLine("   '{0}'", match.Value);
    
    // This example displays the following output to the console:
    //       '<%@ Page Language="VB" Explicit="true" %>'
    //       '<% @IMPORT Namespace="System.Collections" %>'
    //       '<% @IMPORT Namespace="System.Collections.Specialized" %>'
    //       '<%      @IMPORT Namespace="System.Collections.Generic" %>'
    //       '<% @IMPORT Namespace="System.Text.RegularExpressions" %>'         
    
    
    

Im folgenden Beispiel wird die DirectiveRegex-Klasse veranschaulicht. Im Beispiel wird gezeigt, dass eine Direktive dem regulären Ausdruck nur dann entspricht, wenn er am Anfang einer Zeichenfolge steht oder der vorherigen Übereinstimmung unmittelbar folgt.

StreamReader sr = new StreamReader(@".\Directives.txt"); 
string directives = sr.ReadToEnd();
DirectiveRegex dirRegex = new DirectiveRegex();

// Get substrings matching regex pattern
MatchCollection matches = dirRegex.Matches(directives);
if (matches.Count > 0)
{
   // Display matches to console
   foreach (Match match in matches)
      Console.WriteLine("   {0}", match.Value);
}      
else
{
   Console.WriteLine("   No match.");
}
// This example displays the following output to the console:
//       <%@ Page Language="VB" Explicit="true" %>
//       <% @IMPORT Namespace="System.Collections" %>      


Im Beispiel wird eine Datei namens directives.txt gelesen, die die folgenden ASP.NET-Direktiven enthält:

<%@ Page Language="VB" Explicit="true" %><% @IMPORT Namespace="System.Collections" %>
<% @IMPORT Namespace="System.Collections.Specialized" %>
<%      @IMPORT Namespace="System.Collections.Generic" %> 
 <% @IMPORT Namespace="System.Text.RegularExpressions" %>

System.Object
  System.Text.RegularExpressions.Regex
    System.Web.RegularExpressions.DirectiveRegex

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft