English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Regulärer Ausdruck Es ist ein Muster zur Übereinstimmung von Eingabe-Text.
Das .Net-Framework bietet einen regulären Ausdrucks-Engine, die solche Übereinstimmungen ermöglicht.
Ein Muster besteht aus einem oder mehreren Zeichen, Operatoren und Strukturen.
Nachstehend sind die verschiedenen Kategorien von Zeichen, Operatoren und Strukturen aufgeführt, die zur Definition regulärer Ausdrücke verwendet werden.
Zeichen-Flucht
Zeichenklasse
定位点
分组构造
Beschränkungszeichen
Rückverweisungskonstruktion
Ersatzkonstruktion
Replacement
Miscellaneous constructions
Das Backslash-Zeichen (\) in regulären Ausdrücken weist darauf hin, dass das folgende Zeichen ein spezielles Zeichen ist oder dass dieses Zeichen wörtlich interpretiert werden soll.
Die folgende Tabelle zeigt die Escape-Zeichen an:
Escape-Zeichen | Description | Pattern | Passen |
---|---|---|---|
\a | Mit dem Warnton (bell) Symbol \u0007 Stimmt überein. | \a | "Warning!" + '\u0007' im "\u0007" |
\b | In der Zeichenklasse mit der Rücktaste \u0008 Stimmt überein. | [\b]{3,} | "\b\b\b\b" im "\b\b\b\b" |
\t | Mit dem Tabulator \u0009 Stimmt überein. | (\w+)\t | "Name\tAddr\t" im "Name\t" und "Addr\t" |
\r | Mit dem Rückgabetaste \u000D übereinstimmen. (\r und Zeilenumbruch \n sind nicht äquivalent.) | \r\n(\w+) | "\r\nHello\nWorld." im "\r\nHello" |
\v | Mit dem Vertikaltabulator \u000B übereinstimmen. | [\v]{2,} | "\v\v\v" im "\v\v\v" |
\f | Mit dem Seitenumbruch \u000C übereinstimmen. | [\f]{2,} | "\f\f\f" im "\f\f\f" |
\n | Mit dem Zeilenumbruch \u000A übereinstimmen. | \r\n(\w+) | "\r\nHello\nWorld." im "\r\nHello" |
\e | Mit dem Escape-Zeichen \u001B stimmt überein. | \e | "\x001B" im "\x001B" |
\ nnn | Ein Zeichen mit oktadischer Darstellung zu spezifizieren (nnn besteht aus zwei bis drei Ziffern). | \w\040\w | Das "a b" in "a bc d" und das "c d" |
\x nn | Ein Zeichen mit hexadezimaler Darstellung zu spezifizieren (nn besteht aus genau zwei Ziffern). | \w\x20\w | Das "a b" in "a bc d" und das "c d" |
\c X \c x | Mit dem ASCII-Kontrollzeichen, das von X oder x angegeben wird, übereinstimmen, wobei X oder x das Alphabet des Kontrollzeichens ist. | \cC | "\x0003" im "\x0003" (Ctrl-C) |
\u nnnn | Ein Unicode-Zeichen mit hexadezimaler Darstellung zu passen (dargestellt durch vierstellige Zahl nnnn). | \w\u0020\w | Das "a b" in "a bc d" und das "c d" |
\ | Stimmt mit dem Zeichen überein, das nach einem nicht erkannten Escape-Zeichen folgt. | \d+[\+-x\*]\d+\d+[\+-x\*\d+ | "(2+2) * 3*9" im "2+2" and "3*9" |
Zeichenklassen stimmen mit jedem Zeichen einer Zeichengruppe überein.
Die folgende Tabelle zeigt die Zeichenklassen an:
Zeichenklasse | Description | Pattern | Passen |
---|---|---|---|
[character_group] | Mit jedem einzelnen Zeichen in character_group übereinstimmen. Standardmäßig ist die Übereinstimmung groß- und kleinschreibungsabhängig. | [mn] | Das "m" in "mat", das "m" in "moon" und das "n" |
[^character_group] | Nicht: Mit jedem einzelnen Zeichen, das nicht in character_group enthalten ist. Standardmäßig sind die Zeichen in character_group groß- und kleinschreibungsabhängig. | [^aei] | "avail" 中的 "v" 和 "l" |
[ first - last ] | 字符范围:与从 first 到 last 的范围中的任何单个字符匹配。 | [b-d] | [b-d]irds 可以匹配 Birds、 Cirds、 Dirds |
. | 通配符:与除 \n 之外的任何单个字符匹配。 若要匹配原意句点字符(. 或 \u002E),您必须在该字符前面加上转义符 (\.)。 | a.e | "have" 中的 "ave", "mate" 中的 "ate" |
\p{ name } | 与 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 | \p{Lu} | "City Lights" 中的 "C" 和 "L" |
\P{ name } | 与不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 | \P{Lu} | "City" 中的 "i"、 "t" 和 "y" |
\w | 与任何单词字符匹配。 | \w | "Room#1" 中的 "R"、 "o"、 "m" 和 "1" |
\W | 与任何非单词字符匹配。 | \W | "Room#1" 中的 "#" |
\s | 与任何空白字符匹配。 | \w\s | "ID A1.3" 中的 "D " |
\S | 与任何非空白字符匹配。 | \s\S | "int __ctr" 中的 " _" |
\d | 与任何十进制数字匹配。 | \d | "4 = IV" 中的 "4" |
\D | 匹配不是十进制数的任意字符。 | \D | "4 = IV" 中的 " "、 "="、 " "、 "I" 和 "V" |
定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。
下表列出了定位点:
断言 | Description | Pattern | Passen |
---|---|---|---|
^ | 匹配必须从字符串或一行的开头开始。 | ^\d{3} | "567-777-" im "567" |
$ | 匹配必须出现在字符串的末尾或出现在行或字符串末尾的 \n 之前。 | -\d{4}$ | "8-12-2012" im "-2012" |
\A | 匹配必须出现在字符串的开头。 | \A\w{4} | "Code-007-" 中的 "Code" |
\Z | 匹配必须出现在字符串的末尾或出现在字符串末尾的 \n 之前。 | -\d{3}\Z | "Bond-901-007" im "-007" |
\z | 匹配必须出现在字符串的末尾。 | -\d{3}\z | "-901-333" im "-333" |
\G | 匹配必须出现在上一个匹配结束的地方。 | \G(\d\) | "(1)(3)(5)[7]、 (9)中的 (1)、 (3)" und "("5)" |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。 | er\b | 匹配"never"中的"er",但不能匹配"verb"中的"er"。 |
\B | 匹配非单词边界。 | er\B | 匹配"verb"中的"er",但不能匹配"never"中的"er"。 |
分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。
下表列出了分组构造:
分组构造 | Description | Pattern | Passen |
---|---|---|---|
( 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" 内的 "A"12xl" und "A12XL" |
(?= subexpression) | 零宽度正预测先行断言。 | \w+(?=\.) | "He is. The dog ran. The sun is out." 中的 "is"、 "ran" 和 "out" |
(?! subexpression) | 零宽度负预测先行断言。 | \b(?!un)\w+\b | "unsure sure unity used" 中的 "sure" 和 "used" |
(?<=subexpression) | 零宽度正回顾后发断言。 | (?A+B+) | "1ABB 3ABBC 5AB 5"AC" 内的 "1ABB", "3ABB" und "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}\b"; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } }
Beschränkungszeichen spezifizieren, wie viele Beispiele des vorherigen Elements (kann ein Zeichen, eine Gruppe oder eine Zeichengruppe sein) im Eingabezeichenfolgen existieren müssen, um eine Übereinstimmung zu erzeugen. Beschränkungszeichen umfassen die in der folgenden Tabelle aufgeführten sprachlichen Elemente.
Die folgende Tabelle listet die Beschränkungszeichen auf:
Beschränkungszeichen | Description | Pattern | Passen |
---|---|---|---|
* | Passt das vorherige Element null oder mehrmals an. | \d*.\d | ".0"、 "19.9"、 "219.9" |
+ | Passt das vorherige Element einmal oder mehrmals an. | "be+" | "been" im "bee", "bent" im "be" |
? | Passt das vorherige Element null oder einmal an. | "rai?n" | "ran"、 "rain" |
{ n } | Passt das vorherige Element genau n Mal an. | ",\d{3} | "1,043.6" im",043", "9,876,543,210" im ",876"、 ",543" und ",210" |
{ n ,} | Passt das vorherige Element mindestens n Mal an. | "\d{2,}" | "166"、 "29"、 "1930" |
{ n , m } | Passt das vorherige Element mindestens n Mal an, aber nicht mehr als m Mal. | "\d{3,5} | "166", "17668", "193024" im "19302" |
*? | Passt das vorherige Element null oder mehrmals an, aber so wenig wie möglich. | \d*?\.\d | ".0"、 "19.9"、 "219.9" |
+? | Passt das vorherige Element einmal oder mehrmals an, aber so wenig wie möglich. | "be+?" | "been" im "be", "bent" im "be" |
?? | Passt das vorherige Element null oder einmal an, aber so wenig wie möglich. | "rai??n" | "ran"、 "rain" |
{ n }? | Passt die Anzahl der Wiederholungen des führenden Elements genau n Mal an. | ",\d{3}?" | "1,043.6" im",043", "9,876,543,210" im ",876"、 ",543" und ",210" |
{ n ,}? | Passt die Anzahl der Wiederholungen des vorherigen Elements mindestens n Mal an, aber so wenig wie möglich. | "\d{2,}?" | "166"、 "29" and "1930" |
{ n , m }? | Passt die Anzahl der Wiederholungen des vorherigen Elements zwischen n und m an, aber so wenig wie möglich. | "\d{3,5}?" | "166", "17668", "193024" im "193" und "024" |
Rückverweisungen erlauben es, im selben regulären Ausdruck später identifizierte vorausgegangene Unterexpressions zu kennzeichnen.
Die folgende Tabelle listet die Rückverweisungskonstruktionen auf:
Rückverweisungskonstruktion | Description | Pattern | Passen |
---|---|---|---|
\ number | Rückverweisung. Passt den Wert des nummerierten Unterexpressions an. | (\w)1 | "seek" im "ee" |
\k< name > | Namentliche Rückverweisung. Passt den Wert der benannten Ausdrucksweise an. | (?< char>\w)\k< char> | "seek" im "ee" |
Ersatzkonstruktionen dienen dazu, reguläre Ausdrücke zu ändern, um either zu aktivieren./oder passen.
Die folgende Tabelle listet die Ersatzkonstruktionen auf:
Ersatzkonstruktion | Description | Pattern | Passen |
---|---|---|---|
| | Passen Sie einen beliebigen Element, das durch das vertikale Strichsymbol (|) getrennt ist. | th(e|is|at) | "this is the day." for "the" and "this" |
(?( expression )yes | no ) | If the regular expression pattern is matched by expression, then match yes; otherwise match the optional no Part. expression is interpreted as a zero-width assertion. | (?(A)A\d{2}\b|\b\d{3}\b) | "A10 C103 910" in "10" and "910" |
(?( name )yes | no ) | If the named or numbered capture group has a match, then match yes; otherwise match the optional no. | (?< quoted>")?(?(quoted).+?"|\S+\s) | "Dogs.jpg "Yiska playing.jpg"" of Dogs.jpg and "Yiska playing.jpg" |
Replacement is the regular expression used in the replacement pattern.
The following table lists characters used for replacement:
Character | Description | Pattern | Replacement pattern | Input string | Resulting string |
---|---|---|---|---|---|
$number | Replace by group number Matched substring. | \b(\w+)(\s)(\w+)\b | $3$2$1 | "one two" | "two one" |
${name} | Replace by named group name Matched substring. | \b(?< word1>\w+)(\s)(?< word2>\w+)\b | ${word2} ${word1} | "one two" | "two one" |
$$ | Replace the character '"$"'. | \b(\d+)\s?USD | $$$1 | "103 USD" | "$103" |
$& | Replace a copy of the entire matched item. | (\$*(\d*(\.+\d+)?){1) | **$& | "$1.30" | "**$1.30**" |
$` | Replace all text before the match. | B+ | $` | "AABBCC" | "AAAACC" |
$' | Replace all text after the match. | B+ | $' | "AABBCC" | "AACCCC" |
$+ | Replace the last captured group. | B+(C+) | $+ | "AABBCCDD" | AACCDD |
$_ | Replace the entire input string. | B+ | $_ | "AABBCC" | "AAAABBCCCC" |
The following table lists various miscellaneous constructions:
Construction | Description | Beispiel |
---|---|---|
(?imnsx-imnsx) | Set or disable options such as case-insensitive in the middle of the pattern. | \bA(?i)b\w+\b Match 'ABA Able Act' for 'ABA' and 'Able' |
(?#Comment) | Inline comment. This comment ends at the first right parenthesis. | \bA(?#Match words starting with 'A')\w+\b |
#}} [End of line] | This comment starts with a non-escaped # and continues to the end of the line. | (?x)\bA\w+\b#Matches words that start with A |
The Regex class is used to represent a regular expression.
The following table lists some commonly used methods in the Regex class:
Number | Method & Description |
---|---|
1 | public bool IsMatch(
string input
) Indicate whether the regular expression specified in the Regex constructor is found in the specified input string. |
2 | public bool IsMatch(
string input,
int startat
) Indicate whether the regular expression specified in the Regex constructor is found in the specified input string starting from the specified start position. |
3 | public static bool IsMatch(
string input,
string pattern
) Indicate whether the specified regular expression is found in the specified input string. |
4 | public MatchCollection Matches(
string input
) Search for all occurrences of the regular expression in the specified input string. |
5 | public string Replace(
string input,
string replacement
) Replace all occurrences of the regular expression pattern in the specified input string with the specified replacement string. |
6 | public string[] Split(
string input
) Split the input string into an array of substrings based on the positions defined by the regular expression pattern specified in the Regex constructor. |
For a complete list of properties of the Regex class, please refer to Microsoft's C# documentation.
The following example matches words that start with 'S':
Wenn der obige Code kompiliert und ausgeführt wird, ergibt er das folgende Ergebnis:
Wörter, die mit 'S' beginnen, werden übereinstimmen: Die Ausdrucksweise: \bS\S* Prächtig Suns
Nachfolgender Beispiel entspricht Wörtern, die mit 'm' beginnen und mit 'e' enden:
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { private static void showMatch(string text, string expr) { Console.WriteLine("Die Ausdrucksweise: " + expr); MatchCollection mc = Regex.Matches(text, expr); foreach (Match m in mc) { Console.WriteLine(m); } } static void Main(string[] args) { string str = "machen Labyrinth und verwalten, es zu messen"; Console.WriteLine("Wörter, die mit 'm' beginnen und mit 'e' enden:"); showMatch(str, @"\bm\S*e\b"); Console.ReadKey(); } } }
Wenn der obige Code kompiliert und ausgeführt wird, ergibt er das folgende Ergebnis:
Wörter, die mit 'm' beginnen und mit 'e' enden, werden übereinstimmen: Die Ausdrucksweise: \bm\S*e\b machen Labyrinth verwalten maß
Nachfolgender Beispiel ersetzt überflüssige Leerzeichen:
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("Original String: {0}", input); Console.WriteLine("Ersetzung String: {0}", result); Console.ReadKey(); } } }
Wenn der obige Code kompiliert und ausgeführt wird, ergibt er das folgende Ergebnis:
Original String: Hello World Ersetzung String: Hello World