Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
Regex, classe
Représente une expression régulière immuable.
Assembly : System (dans System.dll)
Le type Regex expose les membres suivants.
| Nom | Description | |
|---|---|---|
|
Regex() | Initialise une nouvelle instance de la classe Regex. |
|
Regex(String) | Initialise et compile une nouvelle instance de la classe Regex pour l'expression régulière spécifiée. |
|
Regex(SerializationInfo, StreamingContext) | Initialise une nouvelle instance de la classe Regex à l'aide de données sérialisées. |
|
Regex(String, RegexOptions) | Initialise et compile une nouvelle instance de la classe Regex pour l'expression régulière spécifiée, avec des options qui modifient le modèle. |
| Nom | Description | |
|---|---|---|
|
CacheSize | Obtient ou définit le nombre maximal d'entrées dans le cache statique actuel des expressions régulières compilées. |
|
Options | Retourne les options passées au constructeur Regex. |
|
RightToLeft | Obtient une valeur indiquant si l'expression régulière cherche de droite à gauche. |
| Nom | Description | |
|---|---|---|
|
CompileToAssembly(RegexCompilationInfo[], AssemblyName) | Compile un ou plusieurs objets Regex spécifiés dans un assembly nommé. |
|
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[]) | Compile un ou plusieurs objets Regex spécifiés dans un assembly nommé avec les attributs spécifiés. |
|
CompileToAssembly(RegexCompilationInfo[], AssemblyName, CustomAttributeBuilder[], String) | Compile un ou plusieurs objets Regex spécifiés et un fichier de ressources spécifié dans un assembly nommé avec les attributs spécifiés. |
|
Equals(Object) | Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.) |
|
Escape | Effectue l'échappement d'un jeu minimal de caractères (\, *, +, ?, |, {, [, (,), ^, $,., # et espace blanc) en remplaçant ces derniers par leur code d'échappement. Cela indique au moteur d'expressions régulières qu'il doit interpréter ces caractères de manière littérale et non comme des métacaractères. |
|
Finalize | Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.) |
|
GetGroupNames | Retourne un tableau de noms de groupes de captures pour l'expression régulière. |
|
GetGroupNumbers | Retourne un tableau des numéros des groupes de captures qui correspondent aux noms des groupes dans un tableau. |
|
GetHashCode | Sert de fonction de hachage pour un type particulier. (Hérité de Object.) |
|
GetType | Obtient le Type de l'instance actuelle. (Hérité de Object.) |
|
GroupNameFromNumber | Obtient le nom du groupe qui correspond au numéro de groupe spécifié. |
|
GroupNumberFromName | Retourne le numéro du groupe qui correspond au nom de groupe spécifié. |
|
InitializeReferences | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
|
IsMatch(String) | Indique si l'expression régulière spécifiée dans le constructeur Regex cherche une correspondance dans une chaîne d'entrée spécifique. |
|
IsMatch(String, Int32) | Indique si l'expression régulière spécifiée dans le constructeur Regex cherche une correspondance dans la chaîne d'entrée spécifiée, en commençant à la position de départ définie dans la chaîne. |
|
IsMatch(String, String) | Indique si l'expression régulière spécifiée cherche une correspondance dans la chaîne d'entrée spécifiée. |
|
IsMatch(String, String, RegexOptions) | Indique si l'expression régulière spécifiée cherche une correspondance dans la chaîne d'entrée spécifiée, à l'aide des options de correspondance spécifiées. |
|
Match(String) | Recherche dans la chaîne d'entrée spécifiée la première occurrence de l'expression régulière spécifiée dans le constructeur Regex. |
|
Match(String, Int32) | Recherche dans la chaîne d'entrée la première occurrence d'une expression régulière, en commençant à la position de départ spécifiée dans la chaîne. |
|
Match(String, String) | Recherche dans la chaîne d'entrée spécifiée la première occurrence de l'expression régulière spécifiée. |
|
Match(String, Int32, Int32) | Recherche dans la chaîne d'entrée la première occurrence d'une expression régulière, en commençant à la position de départ spécifiée et en recherchant uniquement le nombre spécifié de caractères. |
|
Match(String, String, RegexOptions) | Recherche dans la chaîne d'entrée la première occurrence de l'expression régulière spécifiée, à l'aide des options de correspondance spécifiées. |
|
Matches(String) | Recherche dans la chaîne d'entrée spécifiée toutes les occurrences d'une expression régulière. |
|
Matches(String, Int32) | Recherche dans la chaîne d'entrée spécifiée toutes les occurrences d'une expression régulière, commençant à la position de démarrage spécifiée dans la chaîne. |
|
Matches(String, String) | Recherche dans la chaîne d'entrée spécifiée toutes les occurrences d'une expression régulière spécifique. |
|
Matches(String, String, RegexOptions) | Recherche dans la chaîne d'entrée spécifiée toutes les occurrences d'une expression régulière spécifique, à l'aide des options de correspondance spécifiées. |
|
MemberwiseClone | Crée une copie superficielle de l'objet Object actif. (Hérité de Object.) |
|
Replace(String, String) | Dans la chaîne d'entrée spécifiée, remplace toutes les chaînes qui correspondent à un modèle d'expression régulière par une chaîne de remplacement spécifique. |
|
Replace(String, MatchEvaluator) | Dans la chaîne d'entrée spécifiée, remplace toutes les chaînes qui correspondent à une expression régulière spécifiée par une chaîne retournée par un délégué MatchEvaluator. |
|
Replace(String, String, Int32) | Dans la chaîne d'entrée spécifiée, remplace le nombre maximal spécifié de chaînes qui correspondent à un modèle d'expression régulière par une chaîne de remplacement spécifique. |
|
Replace(String, String, String) | Dans la chaîne d'entrée spécifiée, remplace toutes les chaînes qui correspondent à l'expression régulière spécifiée par une chaîne de remplacement spécifique. |
|
Replace(String, String, MatchEvaluator) | Dans la chaîne d'entrée spécifiée, remplace toutes les chaînes qui correspondent à une expression régulière spécifiée par une chaîne retournée par un délégué MatchEvaluator. |
|
Replace(String, MatchEvaluator, Int32) | Dans la chaîne d'entrée spécifiée, remplace le nombre maximal spécifié de chaînes qui correspondent à un modèle d'expression régulière par une chaîne retournée par un délégué MatchEvaluator. |
|
Replace(String, String, Int32, Int32) | Dans la sous-chaîne d'entrée spécifiée, remplace le nombre maximal spécifié de chaînes qui correspondent à un modèle d'expression régulière par une chaîne de remplacement spécifique. |
|
Replace(String, String, String, RegexOptions) | Dans la chaîne d'entrée spécifiée, remplace toutes les chaînes qui correspondent à l'expression régulière spécifiée par une chaîne de remplacement spécifique. Les options spécifiées modifient l'opération correspondante. |
|
Replace(String, String, MatchEvaluator, RegexOptions) | Dans la chaîne d'entrée spécifiée, remplace toutes les chaînes qui correspondent à une expression régulière spécifiée par une chaîne retournée par un délégué MatchEvaluator. Les options spécifiées modifient l'opération correspondante. |
|
Replace(String, MatchEvaluator, Int32, Int32) | Dans la sous-chaîne d'entrée spécifiée, remplace le nombre maximal spécifié de chaînes qui correspondent à un modèle d'expression régulière par une chaîne retournée par un délégué MatchEvaluator. |
|
Split(String) | Fractionne la chaîne d'entrée spécifiée aux positions définies par un modèle d'expression régulière spécifié dans le constructeur Regex. |
|
Split(String, Int32) | Fractionne la chaîne d'entrée spécifiée un nombre de fois maximal spécifié aux positions définies par une expression régulière spécifiée dans le constructeur Regex. |
|
Split(String, String) | Fractionne la chaîne d'entrée aux positions définies par un modèle d'expression régulière. |
|
Split(String, Int32, Int32) | Fractionne la chaîne d'entrée spécifiée un nombre de fois maximal spécifié aux positions définies par une expression régulière spécifiée dans le constructeur Regex. La recherche du modèle d'expression régulière débute à une position de caractère spécifiée dans la chaîne d'entrée. |
|
Split(String, String, RegexOptions) | Fractionne la chaîne d'entrée aux positions définies par un modèle d'expression régulière spécifié. Les options spécifiées modifient l'opération correspondante. |
|
ToString | Retourne le modèle d'expression régulière qui a été passé au constructeur Regex. (Substitue Object.ToString().) |
|
Unescape | Convertit les caractères d'échappement dans la chaîne d'entrée. |
|
UseOptionC | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
|
UseOptionR | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
| Nom | Description | |
|---|---|---|
|
capnames | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
|
caps | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
|
capsize | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
|
capslist | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
|
factory | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
|
pattern | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
|
roptions | Infrastructure. Utilisé par un objet Regex généré par la méthode CompileToAssembly. |
| Nom | Description | |
|---|---|---|
|
ISerializable.GetObjectData | Infrastructure. Remplit un objet SerializationInfo avec les données nécessaires pour désérialiser l'objet Regex actuel. |
La classe Regex représente le moteur des expressions régulières du .NET Framework. Il est possible de l'utiliser pour analyser rapidement des volumes importants de texte pour rechercher des modèles de caractères spécifiques dans le but d'extraire, de modifier, de remplacer ou de supprimer des sous-chaînes de texte, ou encore d'ajouter les chaînes extraites à une collection afin de générer un rapport.
Remarque
|
|---|
|
Si votre intérêt principal est de valider une chaîne en déterminant si elle se conforme à un modèle particulier, vous pouvez utiliser la classe System.Configuration.RegexStringValidator. |
Pour utiliser des expressions régulières, vous définissez le modèle que vous souhaitez identifier dans un flux de texte à l'aide de la syntaxe documentée dans Éléments du langage des expressions régulières. Ensuite, vous pouvez éventuellement instancier un objet Regex. Enfin, vous pouvez exécuter certaines opérations, telles que remplacer du texte qui correspond au modèle d'expression régulière, ou identifier une correspondance de modèle.
Regex etMéthodes de chaîne
La classe System.String inclut plusieurs méthodes de comparaison et recherche que vous pouvez utiliser pour exécuter les critères spéciaux avec le texte. Par exemple, les méthodes String.Contains, String.EndsWith et String.StartsWith déterminent si une instance de chaîne contient une sous-chaîne spécifiée ; et les méthodes String.IndexOf, String.IndexOfAny, String.LastIndexOf et String.LastIndexOfAny retournent la position de départ d'une sous-chaîne spécifiée dans une chaîne. Utilisez les méthodes de la classe System.String lorsque vous recherchez une chaîne spécifique. Utilisez la classe Regex lorsque vous recherchez un modèle spécifique dans une chaîne. Pour plus d'informations et d'exemples, consultez Expressions régulières du .NET Framework.
Statique etMéthodes d'instance
Après avoir défini un modèle d'expression régulière, vous pouvez le fournir au moteur des expressions régulières de deux façons.
-
En instanciant un objet Regex qui représente l'expression régulière. Pour ce faire, vous devez passer le modèle d'expression régulière à un constructeur Regex. Un objet Regex est immuable ; lorsque vous instanciez un objet Regex avec une expression régulière, l'expression régulière de cet objet ne peut pas être modifiée.
-
En fournissant à la fois l'expression régulière et le texte à rechercher à une méthode Regexstatic (Shared en Visual Basic). Cela vous permet d'utiliser une expression régulière sans créer explicitement un objet Regex.
Toutes les méthodes d'identification de modèle Regex incluent des surcharges statiques et d'instance à la fois.
Le moteur des expressions régulières doit compiler un modèle particulier pour que celui-ci puisse être utilisé. Étant donné que les objets Regex sont immuables, c'est une procédure unique qui se produit lorsqu'un constructeur de classe Regex ou une méthode statique est appelé. Pour éviter de compiler une expression régulière unique à plusieurs reprises, le moteur des expressions régulières met en cache les expressions régulières compilées utilisées dans les appels de méthode statique. En conséquence, les méthodes utilisant des critères spéciaux d'expression régulière offrent une performance comparable aux méthodes statique et d'instance.
Important
|
|---|
|
Dans le .NET Framework versions 1.0 et 1.1, toutes les expressions régulières compilées ont été mises en cache, qu'elles aient été utilisées en appels de méthode statique ou d'instance. À partir du .NET Framework 2.0, seules les expressions régulières utilisées dans les appels de méthode statique sont mises en cache. |
Toutefois, le système de la mise en cache implémenté par le moteur des expressions régulières peut affecter de façon défavorable la performance dans les deux cas suivants :
-
Lorsque vous utilisez des appels de méthode statique avec un grand nombre d'expressions régulières. Par défaut, le moteur des expressions régulières met en cache les 15 dernières expressions régulières statiques. Si votre application utilise plus de 15 expressions régulières statiques, certaines expressions régulières doivent être recompilées. Pour empêcher cette recompilation, vous pouvez augmenter la propriété Regex.CacheSize à une valeur appropriée.
-
Lorsque votre application instancie de nouveaux objets Regex avec les expressions régulières compilées précédemment. Par exemple, le code suivant définit une expression régulière pour trouver des mots dupliqués dans les lignes individuelles d'un flux de texte. Bien que l'exemple utilise une expression régulière unique, il instancie un nouvel objet Regex pour traiter chaque ligne de texte. Cela provoque la recompilation de l'expression régulière avec chaque itération de la boucle.
StreamReader sr = new StreamReader(filename); string input; string pattern = @"\b(\w+)\s\1\b"; while (sr.Peek() >= 0) { input = sr.ReadLine(); Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase); MatchCollection matches = rgx.Matches(input); if (matches.Count > 0) { Console.WriteLine("{0} ({1} matches):", input, matches.Count); foreach (Match match in matches) Console.WriteLine(" " + match.Value); } } sr.Close();
Pour empêcher la recompilation, l'application doit instancier un objet Regex unique qui est accessible à tout le code qui le requiert, comme indiqué dans l'exemple réécrit suivant.
StreamReader sr = new StreamReader(filename); string input; string pattern = @"\b(\w+)\s\1\b"; Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase); while (sr.Peek() >= 0) { input = sr.ReadLine(); MatchCollection matches = rgx.Matches(input); if (matches.Count > 0) { Console.WriteLine("{0} ({1} matches):", input, matches.Count); foreach (Match match in matches) Console.WriteLine(" " + match.Value); } } sr.Close();
Exécution d'opérations d'expression régulière
Si vous décidez d'instancier un objet Regex et d'appeler ses méthodes ou des méthodes statiques, la classe Regex offre les fonctionnalités de critères spéciaux suivantes :
-
Validation d'une correspondance. Vous appelez la méthode IsMatch pour déterminer si une correspondance est présente.
-
Récupération d'une correspondance unique. Vous appelez la méthode Match pour récupérer un objet Match qui représente la première correspondance dans une chaîne ou dans une partie d'une chaîne. Les correspondances suivantes peuvent être récupérées en appelant la méthode Match.NextMatch.
-
Récupération de toutes les correspondances. Vous appelez la méthode Matches pour récupérer un objet System.Text.RegularExpressions.MatchCollection qui représente toutes les correspondances trouvées dans une chaîne ou dans une partie d'une chaîne.
-
Remplacement de texte correspondant. Vous appelez la méthode Replace pour remplacer le texte correspondant. Le texte de remplacement peut également être défini par une expression régulière. De plus, quelques-unes des méthodes Replace incluent un paramètre MatchEvaluator qui vous permet de définir par programmation le texte de remplacement.
-
Création d'un tableau de chaînes formé de parties d'une chaîne d'entrée. Vous appelez la méthode Split pour fractionner une chaîne d'entrée aux positions définies par l'expression régulière.
En plus de ses méthodes utilisant des critères spéciaux, la classe Regex inclut plusieurs méthodes à usage déterminé :
-
La méthode Escape échappe tous les caractères qui peuvent être interprétés comme opérateurs d'expression régulière dans une expression régulière ou une chaîne d'entrée.
-
La méthode Unescape supprime ces caractères d'échappement.
-
La méthode CompileToAssembly crée un assembly qui contient des expressions régulières prédéfinies. Le .NET Framework contient des exemples de ces assemblys à objectifs spécifiques dans l'espace de noms System.Web.RegularExpressions.
L'exemple de code suivant utilise une expression régulière pour vérifier les occurrences répétées de mots dans une chaîne. L'expression régulière \b(?<word>\w+)\s+(\k<word>)\b peut être interprétée comme illustré dans le tableau suivant.
|
Modèle |
Description |
|---|---|
|
\b |
Démarre la correspondance à la limite d'un mot. |
|
(?<word>\w+) |
Met en correspondance un ou plusieurs caractères du mot jusqu'à la limite d'un mot. Nomme ce groupe capturé word. |
|
\s+ |
Met en correspondance un ou plusieurs espaces blancs. |
|
(\k<word>) |
Met en correspondance le groupe capturé nommé word. |
|
\b |
Mettre en correspondance la limite d'un mot. |
using System; using System.Text.RegularExpressions; public class Test { public static void Main () { // Define a regular expression for repeated words. Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); // Define a test string. string text = "The the quick brown fox fox jumped over the lazy dog dog."; // Find matches. MatchCollection matches = rx.Matches(text); // Report the number of matches found. Console.WriteLine("{0} matches found in:\n {1}", matches.Count, text); // Report on each match. foreach (Match match in matches) { GroupCollection groups = match.Groups; Console.WriteLine("'{0}' repeated at positions {1} and {2}", groups["word"].Value, groups[0].Index, groups[1].Index); } } } // The example produces the following output to the console: // 3 matches found in: // The the quick brown fox fox jumped over the lazy dog dog. // 'The' repeated at positions 0 and 4 // 'fox' repeated at positions 20 and 25 // 'dog' repeated at positions 50 and 54
L'exemple de code suivant illustre l'utilisation d'une expression régulière pour vérifier si une chaîne représente une valeur monétaire ou a le format correct pour représenter une valeur monétaire. Dans ce cas, l'expression régulière est construite dynamiquement à partir des propriétés NumberFormatInfo.CurrencyDecimalSeparator, CurrencyDecimalDigits, NumberFormatInfo.CurrencySymbol, NumberFormatInfo.NegativeSign et NumberFormatInfo.PositiveSign pour la culture actuelle de l'utilisateur. Si la culture actuelle du système est en-US, l'expression régulière résultante est ^\s*[\+-]?\s?\$?\s?(\d*\.?\d{2}?){1}$. Cette expression régulière peut être interprétée comme illustré dans le tableau suivant.
|
Modèle |
Description |
|---|---|
|
^ |
Démarre au début de la chaîne. |
|
\s* |
Correspond à zéro, un ou plusieurs espaces blancs. |
|
[\+-]? |
Met en correspondance zéro ou une occurrence d'un signe positif ou négatif. |
|
\s? |
Met en correspondance zéro ou un espace blanc. |
|
\$? |
Met en correspondance zéro ou une occurrence du signe dollar. |
|
\s? |
Met en correspondance zéro ou un espace blanc. |
|
\d* |
Met en correspondance zéro ou plusieurs chiffres décimaux. |
|
\.? |
Met en correspondance zéro ou un symbole de virgule décimale. |
|
\d{2}? |
Correspond zéro ou une fois à deux chiffres décimaux. |
|
(\d*\.? \d{2}?){1} |
Met en correspondance le modèle de chiffres intégraux et fractionnaires séparés par un symbole de virgule décimale au moins une fois. |
|
$ |
Faire correspondre la fin de la chaîne. |
Dans ce cas, l'expression régulière suppose qu'une chaîne de devise valide ne contient pas de symboles de séparateur de groupes et qu'elle n'a pas de chiffres fractionnaires ou qu'elle n'a pas le nombre de chiffres fractionnaires défini par la propriété CurrencyDecimalDigits de la culture actuelle.
using System; using System.Globalization; using System.Text.RegularExpressions; public class Example { public static void Main() { // Get the current NumberFormatInfo object to build the regular // expression pattern dynamically. NumberFormatInfo nfi = NumberFormatInfo.CurrentInfo; // Define the regular expression pattern. string pattern; pattern = @"^\s*["; // Get the positive and negative sign symbols. pattern += Regex.Escape(nfi.PositiveSign + nfi.NegativeSign) + @"]?\s?"; // Get the currency symbol. pattern += Regex.Escape(nfi.CurrencySymbol) + @"?\s?"; // Add integral digits to the pattern. pattern += @"(\d*"; // Add the decimal separator. pattern += Regex.Escape(nfi.CurrencyDecimalSeparator) + "?"; // Add the fractional digits. pattern += @"\d{"; // Determine the number of fractional digits in currency values. pattern += nfi.CurrencyDecimalDigits.ToString() + "}?){1}$"; Regex rgx = new Regex(pattern); // Define some test strings. string[] tests = { "-42", "19.99", "0.001", "100 USD", ".34", "0.34", "1,052.21", "$10.62", "+1.43", "-$0.23" }; // Check each test string against the regular expression. foreach (string test in tests) { if (rgx.IsMatch(test)) Console.WriteLine("{0} is a currency value.", test); else Console.WriteLine("{0} is not a currency value.", test); } } } // The example displays the following output: // -42 is a currency value. // 19.99 is a currency value. // 0.001 is not a currency value. // 100 USD is not a currency value. // .34 is a currency value. // 0.34 is a currency value. // 1,052.21 is not a currency value. // $10.62 is a currency value. // +1.43 is a currency value. // -$0.23 is a currency value.
Étant donné que l'expression régulière dans cet exemple est construite dynamiquement, nous ne savons pas au moment de la conception si le symbole monétaire de la culture actuelle, le signe décimal ou les signes positif et négatif peuvent être mal interprétés par le moteur des expressions régulières comme opérateurs du langage de l'expression régulière. Pour empêcher toute mauvaise interprétation, l'exemple passe chaque chaîne générée dynamiquement à la méthode Escape.
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
La classe Regex est thread-safe et immuable (en lecture seule). Les objets Regex peuvent être créés sur tout thread et partagés entre les threads. Pour plus d'informations, consultez Sécurité des threads.
System.Text.RegularExpressions.Regex
System.Web.RegularExpressions.AspCodeRegex
System.Web.RegularExpressions.AspEncodedExprRegex
System.Web.RegularExpressions.AspExprRegex
System.Web.RegularExpressions.CommentRegex
System.Web.RegularExpressions.DatabindExprRegex
System.Web.RegularExpressions.DataBindRegex
System.Web.RegularExpressions.DirectiveRegex
System.Web.RegularExpressions.EndTagRegex
System.Web.RegularExpressions.GTRegex
System.Web.RegularExpressions.IncludeRegex
System.Web.RegularExpressions.LTRegex
System.Web.RegularExpressions.RunatServerRegex
System.Web.RegularExpressions.ServerTagsRegex
System.Web.RegularExpressions.SimpleDirectiveRegex
System.Web.RegularExpressions.TagRegex
System.Web.RegularExpressions.TagRegex35
System.Web.RegularExpressions.TextRegex
Remarque
Important