« Expressions rationnelles » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
Aucun résumé des modifications
 
Ligne 14 : Ligne 14 :


// multiples occurrences
// multiples occurrences
foreach (Match match in regex.Matches("texte", @"expression rationnelle"))
foreach (Match match in Regex.Matches("texte", @"expression rationnelle"))
{
{
     Console.WriteLine(match.Value);
     Console.WriteLine(match.Value);

Dernière version du 7 novembre 2023 à 22:33

Tests online

Expressions rationnelles

Csharp.svg
var match = Regex.Match("texte", @"expression rationnelle");
if (match.Success) // test si une correspondance a été trouvée
{
    match.Value; // valeur de la correspondance au format string
}

// multiples occurrences
foreach (Match match in Regex.Matches("texte", @"expression rationnelle"))
{
    Console.WriteLine(match.Value);
}
// use OfType<Match>() to get IEnumerable<Match> from MatchCollection
regex.Matches("texte", @"expression rationnelle").OfType<Match>().Select(x => x.Value);

// Supprimer ou remplacer une expression rationnel
var newString = Regex.Replace("texte original", 
  @"expression rationnelle (groupe) (groupe)", 
  "valeur de remplacement $1 $2");
Les double quotes dans un verbatim string literal (@"") sont échappés avec un autre double quote.

Groupes

Csharp.svg
var match = Regex.Match("texte", @"\w(?<groupe1>\w)\w(?<groupe2>\w)\w");
if (match.Success) // test si une correspondance a été trouvée
{
    match.Groups["groupe1"].Success; // true
    match.Groups["groupe1"].Value; // "e"
    match.Groups["groupe2"].Value; // "t"

    match.Groups["groupe3"].Success; // false
    match.Groups["groupe3"].Value; // ""
}
else
{
    match.Groups["groupe1"].Success; // false
    match.Groups["groupe1"].Value; // ""
}

Options

Csharp.svg
Regex.Replace(input, pattern, "", RegexOptions.IgnoreCase);

// ^ correspond au début de ligne et \r$ à la fin de ligne, au lieu de début de texte et fin de texte
Regex.Replace(input, @"^pattern\r$", RegexOptions.Multiline);

// . correspond à tous les caractères, au lieu de tous les caractères sauf \n
Regex.Replace(input, pattern, RegexOptions.Singleline);

// plusieurs options
Regex.Replace(input, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
u utf8
\w inclut les accents
i recherche insensible à la casse

Compiled

Csharp.svg
private static readonly Regex AlphanumRegex = new(@"^[a-zA-Z0-9][a-zA-Z0-9 ]+$", RegexOptions.Compiled);

La création de l'expression prend 10x plus de temps, mais améliore la rapidité d'utilisation de 30%.

Aide-mémoire

. Joker : n'importe quel caractère sauf \n
[abc] Un caractère parmi a, b ou c
[^abc0-9] Un caractère qui n'est pas a, b, c et 0 à 9
[a-z] Un caractère dans la liste allant de a à z
[a-zA-Z] Un caractère dans la liste allant de a à z ou dans la liste allant de A à Z
\s N'importe quel caractère d'espacement. Équivalent à [ \n\r\t\v\f]
\w N'importe quel caractère alphanumérique. Équivalent à [a-zA-Z0-9_]
\d N'importe quel chiffre décimal. Équivalent à [0-9]
\b chaîne vide au début ou à la fin d'un mot. \bmot\b correspond à mot.
\S \W \D \B Opposés de \s \w \d \b(chaîne vide mais pas au début ou à la fin d'un mot)
(a|b) a ou b
x? 0 ou 1 fois x
x* 0 ou plusieurs fois x
x+ Au moins 1 fois x
x{6} 6 fois x
x{3,6} Entre 3 et 6 fois x
x{6,} Au moins 6 fois x
^... Commence par ...
...$ Se termine par ...
*?,+?,??,{m,n}? Mode minimal pour *, +, ? et {}. Donne la correspondance avec le moins de caractères possible.
(?:...) Parenthèses de non-capture. Pas de création de groupes ni de backreferences. Améliore les performances de l'expression rationnelle.
(?=...) Assertion look-ahead, correspond si la position actuelle dans la chaîne de caractères est suivie par ... Exemple: "Isaac(?=Asimov)" correspondra à "Isaac" seulement si il suivi de "Asimov".
(?!...) Assertion look-ahead négative, correspond si la position actuelle dans la chaîne de caractères n'est pas suivie par ...
(?<=...) Assertion look-behind, correspond si la position actuelle dans la chaîne de caractères est précédée par ... Exemple: "(?<=abc)def" correspondra à "def" seulement si il est précédé par "abc". La condition d'assertion doit correspondre a une chaîne de caractères de longueur fixe, ce qui signifie que abc ou a|b sont permis, mais a* ne l'est pas.
(?<!...) Assertion look-behind négative, correspond si la position actuelle dans la chaîne de caractères n'est précédée par ...
^((?!XXX).)*$ toutes les lignes qui ne contiennent pas XXX