2023-08-11 17:51:00
Microsoft a déjà introduit des générateurs de code source dans .NET 5.0 et C# 9.0. Maintenant, dans .NET 7.0, il existe un tel générateur d’expressions régulières dans la classe System.Text.RegularExpressions.Generator
qui améliore l’exécution des expressions régulières par rapport à l’interprétation d’exécution ou à la compilation d’exécution précédente (RegexOptions.Compiled
) d’expressions régulières accélérées. De plus, la génération de code au moment du développement est compatible avec la prochaine compilation anticipée .NET (voir la partie 17 de cette série), qui ne permet plus la compilation au moment de l’exécution.
Publicité
docteur Holger Schwichtenberg est expert en technologie en chef chez MAXIMAGO, qui propose un développement de logiciels axé sur l’innovation et l’expérience, y compris dans des domaines hautement critiques liés à la sécurité. Il est également à la tête du réseau d’experts www.IT-Visions.de, qui soutient de nombreuses moyennes et grandes entreprises avec des conseils et une formation dans le développement et l’exploitation de logiciels avec 38 experts renommés.
Pour ce faire, vous écrivez une classe partielle avec une méthode partielle (voir listing). Annotez cette méthode System.Text.RegularExpressions.GeneratedRegexAttribute
(dans la phase de prévisualisation, le nom de la classe RegexGenerator verwendet
) en spécifiant l’expression régulière et toutes les options d’analyseur RegEx nécessaires.
Exemple
Auparavant, vous travailliez avec des expressions régulières dans .NET avec la classe System.Text.RegularExpressions.RegEx
en spécifiant l’expression régulière dans le constructeur. L’expression régulière a été soit interprétée à l’exécution
public string ExtractEMail_Classic(string input)
{
var re =
new Regex(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*");
var m = re.Match(input);
return m.Value;
}
ou compilé en langage intermédiaire au moment de l’exécution :
Publicité
public string ExtractEMail_ClassicCompiled(string input)
{
// Specifies that the regular expression is compiled to MSIL code,
// instead of being interpreted. Compiled regular expressions
// maximize run-time performance at the expense of initialization time.
var re =
new Regex(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*",
RegexOptions.Compiled);
var m = re.Match(input);
return m.Value;
}
Cette méthode est nouvelle dans .NET 7.0 : vous écrivez une méthode partielle dans une classe partielle avec l’annotation [GeneratedRegex]
:
public partial class Checker // Partielle Klasse
{
[GeneratedRegex(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*")]
// Partielle Methode, die dann von SG implementiert wird
public partial Regex EMailRegEx();
}
Vous pouvez ensuite appeler cette méthode dans votre propre code :
public bool IsEMail(string input)
{
return EMailRegEx().IsMatch(input);
}
ou
public string ExtractEMail(string input)
{
return EMailRegEx().Match(input).Value;
}
Refactorisation dans Visual Studio
Visual Studio 2022 à partir de la version 17.4 propose une refactorisation dans le nouveau générateur de source pour les instanciations RegEx existantes :
perspectives
La prochaine partie de cette série concerne la vitesse d’exécution des expressions régulières avec le générateur de source par rapport à l’utilisation de la classe RegEx
.
(rme)
#Nouveau #dans #.NET #Générateur #source #pour #les #expressions #régulières
1691809630