Neuigkeiten in der .NET-Klassenbibliothek, Teil 10: Zeitbegrenzung für reguläre Ausdrücke

Der letzte Beitrag der Artikelserie zu den nicht so bekannten Neuerungen der .NET-Klassenbibliothek behandelt die Zeitbegrenzung für reguläre Ausdrücke.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Die Version 4.5 der .NET-Framework-Klassenbibliothek enthält 947 neue Klassen. Eine Artikelserie stellt zehn Neuerungen vor, die nicht die großen Bibliotheken betreffen und daher nicht so im Licht der Öffentlichkeit stehen. Nachdem zuletzt asynchrone Methoden für Netzwerkzugriffe vorgestellt wurden, geht es heute in Teil 10 um die Zeitbegrenzung für reguläre Ausdrücke.

Reguläre Ausdrücke werden in der .NET-Klassenbibliothek schon seit Version 1.0 in der Klasse System.Text.RegularExpressions.Regex unterstützt. Neu der Klasse RegEx in .NET 4.5 ist die Möglichkeit, für die statischen Methoden IsMatch(), Match(), Matches(), Split() und Replace() eine Zeitbeschränkung (Timeout) zu hinterlegen. Dies erfolgt in einem neuen Parameter matchTimeout. Das ist sinnvoll, da manche reguläre Ausdrücke extrem aufwendig in der Auswertung sein können.

const String EINGABE = @"08/01/1972";
const string MUSTER = @"\b(?<month>\d{1,2})/(?<day>\d{1,2})/
(?<year>\d{2,4})\b";
const string ERSATZ = @"${day}-${month}-${year}";

Console.WriteLine("Eingabe: " + EINGABE);
Console.WriteLine("Eingabeprüfung (Timeout: 5 Sekunden)...");
var pruefungsErgebnis = Regex.IsMatch(EINGABE, MUSTER,
RegexOptions.None, new TimeSpan(0, 0, 5));
Console.WriteLine("Ergebnis: " + pruefungsErgebnis);

Console.WriteLine("Konvertierung (Timeout: 5 Sekunden)...");
var konvertierungsErgebnis = Regex.Replace(EINGABE,
MUSTER, ERSATZ, RegexOptions.None, new TimeSpan(0, 0, 5));
Console.WriteLine("Ergebnis: " + konvertierungsErgebnis);


()