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

Der Dotnet-Doktor  –  0 Kommentare

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);