English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Expression régulière C'est un modèle de correspondance pour le texte d'entrée.
Le cadre .Net fournit un moteur d'expression régulière permettant ce type de correspondance.
Le motif est composé d'un ou plusieurs caractères, opérateurs et structures.
Le tableau suivant liste les caractères, opérateurs et structures utilisés pour définir les expressions régulières.
Échappement de caractères
Classe de caractères
Points de repère
分组构造
Quantifier
Backreference construction
Alternative construction
Remplacement
Constructions d'articles
Le caractère de barre oblique inverse () dans l'expression régulière indique que le caractère suivant est un caractère spécial, ou que ce caractère doit être interprété littéralement.
Le tableau suivant liste les caractères d'échappement :
Caractères d'échappement | Description | Modèle | Match |
---|---|---|---|
\a | Correspond au symbole d'alarme (bell) \u0007 Correspond. | \a | Attention ! + '\u0007' contient "\u0007" |
\b | Dans une classe de caractères, correspond à la touche d'effacement \u0008 Correspond. | [\b]{3,} | Dans "\b\b\b\b" correspond à "\b\b\b\b" |
\t | Correspond à la tabulation \u0009 Correspond. | (\w+)\t | Dans "Name\tAddr\t" correspond à "Name\t" et "Addr\t" |
\r | Correspond au retour chariot \u000D. (\r et \n ne sont pas équivalents.). | \r\n(\w+) | Dans "\r\nHello\nWorld." correspond à "\r\nHello" |
\v | Correspond à la tabulation verticale \u000B. | [\v]{2,} | Dans "\v\v\v" correspond à "\v\v\v" |
\f | Correspond à la page de contrôle \u000C. | [\f]{2,} | Dans "\f\f\f" correspond à "\f\f\f" |
\n | Correspond au retour chariot \u000A. | \r\n(\w+) | Dans "\r\nHello\nWorld." correspond à "\r\nHello" |
\e | Correspond à l'escape \u001B Correspond. | \e | "\x001Dans B" correspond à "\x001B" |
\ nnn | Spécifiez un caractère en utilisant une représentation octale (nnn est composé de deux à trois chiffres). | \w\040\w | Dans "a bc d", correspond à "a b" et "c d" |
\x nn | Spécifiez un caractère en utilisant une représentation hexadécimale (nn est composé de deux chiffres). | \w\x20\w | Dans "a bc d", correspond à "a b" et "c d" |
\c X \c x | Correspond à X ou x, le caractère de contrôle ASCII spécifié, où X ou x est la lettre du caractère de contrôle. | \cC | "\x0003" contient "\x0003" (Ctrl-C) |
\u nnnn | Correspond à un caractère Unicode (représenté par un quaternaire de quatre chiffres). | \w\u0020\w | Dans "a bc d", correspond à "a b" et "c d" |
\ | Correspond au caractère suivant après un caractère d'échappement non reconnu. | \d+[\+-x\*]\d+\d+[\+-x\*\d+ | " (2+2) * 3*9" with "2+2" et "3*9" |
Une classe de caractères correspond à tout caractère d'un ensemble de caractères.
Le tableau suivant liste les classes de caractères :
Classe de caractères | Description | Modèle | Match |
---|---|---|---|
[character_group] | Correspond à tout caractère individuel du character_group. Par défaut, la correspondance est sensible à la casse. | [mn] | Le "m" dans "mat", le "m" et le "n" dans "moon" |
[^character_group] | Non : correspond à aucun caractère individuel extérieur au character_group. Par défaut, les caractères du character_group sont sensibles à la casse. | [^aei] | "avail" de "v" et "l" |
[ first - last ] | Portée de caractères : Correspond à tout caractère dans la gamme de first à last. | [b-d] | [b-d]irds peut correspondre à Birds, Cirds, Dirds |
. | Caractère générique : Correspond à tout caractère sauf \n. Pour correspondre à l'original point décimal (.2E), vous devez ajouter un antiséparateur de caractères (\.) avant ce caractère. | a.e | "have" de "ave" dans "mate" de "ate" |
\p{ name } | Correspond à name Correspond à tout caractère d'une catégorie universelle Unicode ou d'un bloc nommé spécifié. | \p{Lu} | "City Lights" de "C" et "L" |
\P{ name } | Correspond à tout caractère qui n'est pas name Correspond à tout caractère d'une catégorie universelle Unicode ou d'un bloc nommé spécifié. | \P{Lu} | "City" de "i" de "t" et "y" |
\w | Correspond à tout caractère mot. | \w | "Room#1de "R" de "o" de "m" et "1" |
\W | Correspond à tout caractère non mot. | \W | "Room#1" de "#" |
\s | Correspond à tout caractère blanc. | \w\s | "ID A1.3" de "D " |
\S | Correspond à tout caractère non blanc. | \s\S | "int __ctr" de " _" |
\d | Correspond à tout nombre décimal. | \d | "4 = IV" de "4" |
\D | Correspond à tout caractère qui n'est pas un nombre décimal. | \D | "4 = IV" de " "de " "de " "I" et "V" |
Les points de repère ou les prédicats atomiques de zéro largeur peuvent réussir ou échouer en fonction de la position actuelle dans la chaîne, mais ils ne font pas avancer l'engine dans la chaîne ou utiliser des caractères.
Le tableau suivant liste les points de repère :
Prédicat | Description | Modèle | Match |
---|---|---|---|
^ | La correspondance doit commencer à la fin de la chaîne ou à la fin d'une ligne. | ^\d{3} | "567-777-" with "567" |
$ | La correspondance doit apparaître à la fin de la chaîne ou à la fin d'une ligne ou après la fin de la chaîne \n avant. | -\d{4}$ | "8-12-2012" with "-2012" |
\A | La correspondance doit apparaître au début de la chaîne. | \A \w{4} | "Code-007-"dans " Code" |
\Z | La correspondance doit apparaître à la fin de la chaîne ou après la fin de la chaîne \n avant. | -\d{3}\Z | "Bond-901-007" with "-007" |
\z | La correspondance doit apparaître à la fin de la chaîne. | -\d{3}\z | "-901-333" with "-333" |
\G | La correspondance doit apparaître à l'endroit où la précédente correspondance s'est terminée. | \G \( \d \) | " (1) (3) (5]7]9) "dans " (1) "de " (3)" et "("5)" |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。 | er\b | 匹配"never"中的"er",但不能匹配"verb"中的"er"。 |
\B | 匹配非单词边界。 | er\B | 匹配"verb"中的"er",但不能匹配"never"中的"er"。 |
分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。
下表列出了分组构造:
分组构造 | Description | Modèle | Match |
---|---|---|---|
( subexpression ) | 捕获匹配的子表达式并将其分配到一个从零开始的序号中。 | (\w)1 | "deep" 中的 "ee" |
(?< name >subexpression) | 将匹配的子表达式捕获到一个命名组中。 | (?< double>\w)\k< double> | "deep" 中的 "ee" |
(?< name1 -name2 >subexpression) | 定义平衡组定义。 | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ | "3+2^((1-3)*(3-1))" 中的 "(("1-3)*(3-1))" |
(?: subexpression) | 定义非捕获组。 | Write(?:Line)? | "Console.WriteLine()" 中的 "WriteLine" |
(?imnsx-imnsx:subexpression) | 应用或禁用 subexpression 中指定的选项。 | A\d{2}(?i:\w+)\b | "A12xl A12XL a12xl" 中的 "A12xl" et "A12XL" |
(?= subexpression) | 零宽度正预测先行断言。 | \w+(?=\.) | "He is. The dog ran. The sun is out." 中的 "is"、 "ran" et "out" |
(?! subexpression) | 零宽度负预测先行断言。 | \b(?!un)\w+\b | "unsure sure unity used" 中的 "sure" et "used" |
(?<=subexpression) | 零宽度正回顾后发断言。 | (?A+B+) | "1ABB 3ABBC 5AB 5AC" 中的 "1ABB"、 "3ABB" et "5AB" |
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string input = "1851 1999 1950 1905 2003"; string pattern = @"(?<=19)\d{2}; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } }
Quantifiers specify how many occurrences of the previous element (which can be a character, group, or character class) must exist in the input string to match the item. Quantifiers include the language elements listed in the table.
The following table lists the quantifiers:
Quantifier | Description | Modèle | Match |
---|---|---|---|
* | Match the previous element zero or more times. | \d*.\d | ".0", "19.9" and "219.9" |
+ | Match the previous element one or more times. | "be+" | "been" with "bee", "bent" with "be" |
? | Match the previous element zero or one time. | "rai?n" | "ran", "rain" |
{ n } | Match the previous element exactly n times. | ",\d{3} | "1,043.6" with "043"9,876,543,210" with "876" and ",543" and ",210" |
{ n ,} | Match the previous element at least n times. | "\d{2," | "166" and "29" and "1930" |
{ n , m } | Match the previous element at least n times, but not more than m times. | "\d{3,5} | "166"17668" "193024" with "19302" |
*? | Match the previous element zero or more times, but as few times as possible. | \d*?\.\d | ".0", "19.9" and "219.9" |
+? | Match the previous element one or more times, but as few times as possible. | "be+?" | "been" with "be", "bent" with "be" |
?? | Match the previous element zero or one time, but as few times as possible. | "rai??n" | "ran", "rain" |
{ n }? | Match the leading element exactly n times. | ",\d{3}?" | "1,043.6" with "043"9,876,543,210" with "876" and ",543" and ",210" |
{ n ,}? | Match the previous element at least n times, but as few times as possible. | "\d{2,}?" | "166" and "29" et "1930" |
{ n , m }? | Match the previous element between n and m times, but as few times as possible. | "\d{3,5}?" | "166"17668" "193024" with "193" and "024" |
Backreference allows to identify previously matched subexpressions later in the same regular expression.
The following table lists the backreference constructions:
Backreference construction | Description | Modèle | Match |
---|---|---|---|
\ number | Backreference. Matches the value of the numbered subexpression. | (\w)1 | "seek" with "ee" |
\k< name > | Named backreference. Matches the value of the named expression. | (?< char>\w)\k< char> | "seek" with "ee" |
Alternative construction is used to modify the regular expression to enable either/Match or.
The following table lists the alternative constructions:
Alternative construction | Description | Modèle | Match |
---|---|---|---|
| | Match any element separated by the vertical bar (|) character. | th(e|is|at) | "this is the day. " pour "the" et "this" |
(?( expression )oui | non ) | Correspondre si le schéma d'expression régulière est spécifié par expression oui; sinon correspondre à l'option optionnelle non Partie. expression est interprété comme une assertion de largeur nulle. | (?(A)A\d{2})\b|\b\d{3})\b) | "A10 C103 910" dans "10" et "910" |
(?( name )oui | non ) | Correspondre si le nom ou le groupe capturé nommé ou numéroté a une correspondance oui; sinon correspondre à l'option optionnelle non. | (?< quoted>")?(?(quoted).+?"|\S+\s) | "Dogs.jpg "Yiska playing.jpg"" pour "Dogs.jpg" et "Yiska playing.jpg" |
Le remplacement est l'expression régulière utilisée dans le modèle de remplacement.
Le tableau suivant liste les caractères utilisés pour le remplacement :
Caractère | Description | Modèle | Modèle de remplacement | Chaîne d'entrée | Chaîne de résultat |
---|---|---|---|---|---|
$number | Remplacer par le numéro du groupe number Sous-chaîne correspondante. | \b(\w+)(\s)(\w+)\b | $3$2$1 | "one two" | "two one" |
${name} | Remplacer par le nom du groupe name Sous-chaîne correspondante. | \b(?< word1>\w+)(\s)(?< word2>\w+)\b | ${word2} ${word1} | "one two" | "two one" |
$$ | Remplacer le caractère "$". | \b(\d+)\s?USD | $$$1 | "103 USD" | "$103" |
$& | Remplacer une copie de l'ensemble de la correspondance. | (\$*(\d*(\.+\d+)?){1) | **$& | "$1.30" | "**$1.30**" |
$` | Remplacer tout le texte de la chaîne d'entrée avant la correspondance. | B+ | $` | "AABBCC" | "AAAACC" |
$' | Remplacer tout le texte de la correspondance. | B+ | $' | "AABBCC" | "AACCCC" |
$+ | Remplacer le dernier groupe capturé. | B+(C+) | $+ | "AABBCCDD" | AACCDD |
$_ | Remplacer la chaîne d'entrée entière. | B+ | $_ | "AABBCC" | "AAAABBCCCC" |
Le tableau suivant liste diverses constructions d'articles :
Construction | Description | Exemple |
---|---|---|
(?imnsx-imnsx) | Définir ou désactiver des options telles que la non-sensibilité à la casse au milieu du modèle. | \bA(?i)b\w+\b Matcher "ABA Able Act" pour "ABA" et "Able" |
(?#commentaire) | Commentaire en ligne. Ce commentaire s'arrête au premier parenthèse droite. | \bA(?#matcher des mots commençant par A)\w+\b |
#}} [Fin de ligne] | Ce commentaire commence par un # non échappé et continue jusqu'à la fin de la ligne. | (?x)\bA\w+\b#Match les mots commençant par A |
La classe Regex est utilisée pour représenter une expression régulière.
Le tableau suivant liste certains des méthodes couramment utilisées de la classe Regex :
Numéro | Méthode & Description |
---|---|
1 | public bool IsMatch(
string input
) Indique si le motif régulier spécifié dans le constructeur Regex est trouvé dans la chaîne d'entrée spécifiée. |
2 | public bool IsMatch(
string input,
int startat
) Indique si le motif régulier spécifié dans le constructeur Regex est trouvé dans la chaîne d'entrée spécifiée, en commençant à partir de la position spécifiée dans la chaîne. |
3 | public static bool IsMatch(
string input,
string pattern
) Indique si le motif régulier spécifié dans le constructeur Regex est trouvé dans la chaîne d'entrée spécifiée. |
4 | public MatchCollection Matches(
string input
) Recherchez toutes les correspondances du motif régulier dans la chaîne d'entrée spécifiée. |
5 | public string Replace(
string input,
string replacement
) Remplacez toutes les chaînes correspondantes au motif régulier dans la chaîne d'entrée spécifiée par la chaîne de remplacement spécifiée. |
6 | public string[] Split(
string input
) Divisez la chaîne d'entrée en tableau de sous-chaînes en fonction de la position définie par le motif régulier dans le constructeur Regex. |
Pour obtenir la liste complète des propriétés de la classe Regex, veuillez consulter la documentation C# de Microsoft.
Le exemple suivant matche les mots commençant par 'S' :
Lorsque le code suivant est compilé et exécuté, il produit le résultat suivant :
Correspondance des mots commençant par 'S': L'Expression: \bS\S* Splendid Suns
Voici un exemple de correspondance des mots commençant par 'm' et se terminant par 'e':
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { private static void showMatch(string text, string expr) { Console.WriteLine("L'Expression: " + expr); MatchCollection mc = Regex.Matches(text, expr); foreach (Match m in mc) { Console.WriteLine(m); } } static void Main(string[] args) { string str = "make maze and manage to measure it"; Console.WriteLine("Correspondance des mots commençant par 'm' et se terminant par 'e':"); showMatch(str, @"\bm\S*e\b"); Console.ReadKey(); } } }
Lorsque le code suivant est compilé et exécuté, il produit le résultat suivant :
Correspondance des mots commençant par 'm' et se terminant par 'e': L'Expression: \bm\S*e\b make maze manage measure
Voici un exemple de remplacement des espaces supplémentaires :
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { static void Main(string[] args) { string input = "Hello World "; string pattern = "\\s"+"; string replacement = " "; Regex rgx = new Regex(pattern); string result = rgx.Replace(input, replacement); Console.WriteLine("Chaîne originale : {0}", input) Console.WriteLine("Chaîne de remplacement : {0}", result); Console.ReadKey(); } } }
Lorsque le code suivant est compilé et exécuté, il produit le résultat suivant :
Chaîne originale : Hello World Chaîne de remplacement : Hello World