Nouvelles Du Monde

Nouveau dans .NET 7.0 [26]: Générateur de source pour les expressions régulières

Nouveau dans .NET 7.0 [26]: Générateur de source pour les expressions régulières

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.Generatorqui 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.

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



Implémentation générée pour la méthode partielle EMailRegEx() (Fig. 1)

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

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 :



Refactoring de new RegEx() dans [GeneratedRegex] (Abb. 2)

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)

Vers la page d’accueil



#Nouveau #dans #.NET #Générateur #source #pour #les #expressions #régulières
1691809630

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ADVERTISEMENT