Třídy znaků
Třída znaků definuje množinu znaků, které se mohou objevit ve vstupním řetězci pro úspěšné porovnání. Jazyk regulárních výrazů v rozhraní .NET Framework podporuje následující třídy znaků:
Skupiny pozitivních znaků. Znak ve vstupním řetězci musí odpovídat některé určité množině znaků. Další informace naleznete v tématu Skupina pozitivních znaků.
Skupiny negativních znaků. Znak ve vstupním řetězci nesmí odpovídat některé určité množině znaků. Další informace naleznete v tématu Skupina negativních znaků.
Jakýkoli znak. Znak . (tečka) je v regulárním výrazu zástupným znakem, který odpovídá libovolnému znaku kromě \n. Další informace naleznete v tématu Jakýkoli znak.
Obecná kategorie nebo pojmenovaný blok sady Unicode. Pro úspěšné porovnání musí být znak ve vstupním řetězci členem určité kategorie sady Unicode, nebo musí spadat do souvislého rozsahu znaků sady Unicode. Další informace naleznete v tématu Kategorie sady Unicode nebo blok sady Unicode.
Negativní obecná kategorie nebo pojmenovaný blok sady Unicode. Pro úspěšné porovnání nesmí být znak ve vstupním řetězci členem určité kategorie sady Unicode, nebo nesmí spadat do souvislého rozsahu znaků sady Unicode. Další informace naleznete v tématu Negativní kategorie sady Unicode nebo blok sady Unicode.
Slovní znak. Znak ve vstupním řetězci může patřit do kterékoli kategorie sady Unicode, která je vhodná pro znaky ve slovech. Další informace naleznete v tématu Slovní znak.
Mimoslovní znak. Znak ve vstupním řetězci může patřit do jakékoli kategorie sady Unicode, která není slovním znakem. Další informace naleznete v tématu Mimoslovní znak.
Prázdný znak. Znak ve vstupním řetězci může být jakýkoli oddělovací znak sady Unicode nebo některý z řídicích znaků. Další informace naleznete v tématu Prázdný znak.
Neprázdný znak. Znak ve vstupní řetězci může být libovolný znak, který není prázdným znakem. Další informace naleznete v tématu Neprázdný znak.
Desítková číslice. Znak ve vstupním řetězci může být kterýkoli ze znaků, které jsou klasifikovány jako desítková číslice sady Unicode. Další informace naleznete v tématu Znak desítkové číslice.
Nedesítková číslice. Znak ve vstupním řetězci může být jakýkoli jiný znak než desítková číslice sady Unicode. Další informace naleznete v tématu Znak desítkové číslice.
Rozhraní .NET Framework podporuje výrazy odčítání tříd znaků, které umožňují definovat množinu znaků jakožto výsledek vyloučení jedné třídy znaků vůči jiné třídě znaků. Další informace naleznete v tématu Odčítání tříd znaků.
Skupina pozitivních znaků. [ ]
Pozitivní skupina znaků určuje seznam znaků, které se mohou objevit ve vstupním řetězci, aby nastala shoda. Tento seznam znaků může být zadán jako jednotlivé znaky, jako rozsah nebo obojí.
Syntaxe pro určení seznamu jednotlivých znaků je následující:
character_group
kde character_group je seznam jednotlivých znaků, které se mohou objevit ve vstupním řetězci pro úspěšnou shodu. character_group se může skládat z jakékoli kombinace jednoho nebo více literálních znaků, uvozovacích znaků nebo tříd znaků.
Syntaxe pro zadání rozsahu znaků je následující:
[firstCharacter-lastCharacter]
kde firstCharacter je znak, který je na začátku rozsahu a lastCharacter je znak, který je na konci rozsahu. Rozsah znaků je souvislá řada znaků definovaná zadáním prvního znaku v řadě, pomlčky (-) a posledního znaku v řadě. Dva znaky jsou souvislé, pokud mají sousedící kódové body sady Unicode.
Některé běžné vzory regulárních výrazů, které obsahují pozitivní třídy znaků jsou uvedeny v následující tabulce.
Maska |
Popis |
---|---|
[aeiou] |
Porovná se všemi samohláskami. |
[\p{P}\d] |
Porovná se všemi interpunkčními znaky a znaky desítkových číslic. |
[\s\p{P}] |
Porovná se všemi prázdnými znaky a znaky interpunkce. |
V Následujícím příkladu je definována skupina pozitivních znaků obsahující znaky "a" a "e" tak, že vstupní řetězec musí obsahovat slovo "grey" nebo "gray" následované jiným slovem, aby došlo ke shodě.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "gr[ae]y\s\S+?[\s|\p{P}]"
Dim input As String = "The gray wolf jumped over the grey wall."
Dim matches As MatchCollection = Regex.Matches(input, pattern)
For Each match As Match In matches
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' gray wolf
' grey wall.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"gr[ae]y\s\S+?[\s|\p{P}]";
string input = "The gray wolf jumped over the grey wall.";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// gray wolf
// grey wall.
Vzor regulárního výrazu gr[ae]y\s\S+?[\s|\p{P}] je definován následujícím způsobem:
Maska |
Popis |
---|---|
gr |
Porovná s literálními znaky "gr". |
[ae] |
Porovná buď s "a" nebo s "e". |
y\s |
Porovná s literálním znakem "y" následovaný prázdným znakem. |
\S+? |
Porovná s jedním nebo více neprázdnými znaky, ale co s nejmenším počtem. |
[\s|\p{P}] |
Porovná s prázdným znakem nebo se znakem interpunkčního znaménka. |
V následujícím příkladu jsou vyhledána slova začínající jakýmkoli velkým písmenem. Je použit podvýraz [A-Z] k reprezentaci rozsahu velkých písmen od A až do Z.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b[A-Z]\w*\b"
Dim input As String = "A city Albany Zulu maritime Marseilles"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b[A-Z]\w*\b";
string input = "A city Albany Zulu maritime Marseilles";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// A
// Albany
// Zulu
// Marseilles
Regulární výraz \b[A-Z]\w*\b je definován podle následující tabulky.
Maska |
Popis |
---|---|
\b |
Začne na hranici slova. |
[A-Z] |
Porovná s libovolným znakem velkého písmena od A až do Z. |
\w* |
Porovná žádný nebo více znaků slova. |
\b |
Porovná hranici slova. |
Zpět na začátek
Skupina negativních znaků: [^]
Skupina negativních znaků určuje seznam znaků, které se nesmí objevit ve vstupním řetězci, aby došlo ke shodě. seznam znaků může být zadán jako jednotlivé znaky, jako rozsah nebo obojí.
Syntaxe pro určení seznamu jednotlivých znaků je následující:
^ character_group
kde character_group je seznam jednotlivých znaků, které se nesmí objevit ve vstupním řetězci pro úspěšnou shodu. character_group se může skládat z jakékoli kombinace jednoho nebo více literálních znaků, uvozovacích znaků nebo tříd znaků.
Syntaxe pro zadání rozsahu znaků je následující:
^firstCharacter-lastCharacter
kde firstCharacter je znak, který je na začátku rozsahu a lastCharacter je znak, který je na konci rozsahu. Rozsah znaků je souvislá řada znaků definovaná zadáním prvního znaku v řadě, pomlčky (-) a posledního znaku v řadě. Dva znaky jsou souvislé, pokud mají sousedící kódové body sady Unicode.
Mohou být spojeny dva nebo více rozsahů znaků. Například, chcete-li určit rozsah desítkových číslic "0" až "9", rozsah malých písmen "a" až "f" a rozsah velkých písmen od "A" až po "F" použijte [0-9a-fA-F].
Uvozovací znak stříšky (^) u skupiny negativních znaků je povinný a označuje, že je daná skupina znaků skupinou negativních znaků, nikoli skupinou pozitivních znaků.
Důležité |
---|
Skupina negativních znaků ve větším vzoru regulárního výrazu není výraz nulové šířky.To znamená, že po vyhodnocení skupiny negativních znaků modul regulárních výrazů postoupí o jeden znak ve vstupním řetězci. |
Některé běžné vzory regulárních výrazů, které obsahují skupiny negativních znaků jsou uvedeny v následující tabulce.
Maska |
Popis |
---|---|
[^aeiou] |
Porovná se všemi znaky kromě samohlásek. |
[^\p{P}\d] |
Porovná se všemi znaky kromě interpunkčních znaků a znaků desítkových číslic. |
Následující příklad porovná libovolné slovo, které začíná znaky "th" a nenásleduje je "o".
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\bth[^o]\w+\b"
Dim input As String = "thought thing though them through thus " + _
"thorough this"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' thing
' them
' through
' thus
' this
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\bth[^o]\w+\b";
string input = "thought thing though them through thus thorough this";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// thing
// them
// through
// thus
// this
Regulární výraz \bth[^o]\w+\b je definován podle následující tabulky.
Maska |
Popis |
---|---|
\b |
Začne na hranici slova. |
th |
Porovná s literálními znaky "th". |
[^o] |
Porovná s libovolným znakem, který není "o". |
\w+ |
Porovná jeden nebo více slovních znaků. |
\b |
Skončí na hranici slova. |
Zpět na začátek
Jakýkoli znak: .
Znak tečky (.) odpovídá libovolnému znaku kromě \n (znak nového řádku, \u000A), se dvěma následujícími kvalifikacemi:
Pokud vzor regulárního výrazu je upraven pomocí možnosti RegexOptions.Singleline, nebo pokud část vzoru obsahující třídu znaků . je upravena pomocí možnosti s, . odpovídá libovolnému znaku. Další informace naleznete v tématu Možnosti regulárních výrazů.
Následující příklad ukazuje různé chování třídy znaků . ve výchozím nastavení a s možností RegexOptions.Singleline. Regulární výraz ^.+ začíná na začátku řetězce a porovnává s každým znakem. Standardně je porovnávání ukončeno na konci prvního řádku. Vzorek regulárního výrazu porovnává znak pro návrat na začátek řádku, \r nebo \u000D, ale ten neodpovídá \n. Protože možnost RegexOptions.Singleline interpretuje celý vstupní řetězec jako jediný řádek, porovnává každý znak ve vstupním řetězci včetně \n.
Imports System.Text.RegularExpressions Module Example Public Sub Main() Dim pattern As String = "^.+" Dim input As String = "This is one line and" + vbCrLf + "this is the second." For Each match As Match In Regex.Matches(input, pattern) Console.WriteLine(Regex.Escape(match.Value)) Next Console.WriteLine() For Each match As Match In Regex.Matches(input, pattern, RegexOptions.SingleLine) Console.WriteLine(Regex.Escape(match.Value)) Next End Sub End Module ' The example displays the following output: ' This\ is\ one\ line\ and\r ' ' This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = "^.+"; string input = "This is one line and" + Environment.NewLine + "this is the second."; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(Regex.Escape(match.Value)); Console.WriteLine(); foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Singleline)) Console.WriteLine(Regex.Escape(match.Value)); } } // The example displays the following output: // This\ is\ one\ line\ and\r // // This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
Poznámka |
---|
Protože odpovídá libovolnému znaku kromě \n, třída znaků . se shoduje také s \r (zpětný znak, \u000D). |
Ve skupině pozitivních nebo negativních znaků je tečka považována za literální znak tečky a nikoli za třídu znaků. Další informace naleznete v dřívějších oddílech tohoto tématu Skupina pozitivních znaků a Skupina negativních znaků. Následující příklad ilustruje definování regulárního výrazu, který obsahuje znak tečky (.) jako třídu znaků i jako člena skupiny pozitivních znaků. Regulární výraz \b.*[.?!;:](\s|\z) začíná na hranici slova, porovnává libovolné znaky dokud nenarazí na jedno ze čtyř interpunkčních znamének, včetně tečky a potom porovnává prázdné znaky nebo konec řetězce.
Imports System.Text.RegularExpressions Module Example Public Sub Main() Dim pattern As STring = "\b.*[.?!;:](\s|\z)" Dim input As String = "this. what: is? go, thing." For Each match As Match In Regex.Matches(input, pattern) Console.WriteLine(match.Value) Next End Sub End Module ' The example displays the following output: ' this. what: is? go, thing.
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = @"\b.*[.?!;:](\s|\z)"; string input = "this. what: is? go, thing."; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } } // The example displays the following output: // this. what: is? go, thing.
Poznámka |
---|
Protože odpovídá libovolnému znaku, prvek jazyka . se často používá s líným kvantifikátorem, pokud se vzor regulárního výrazu pokusí vícekrát porovnávat jakýkoli znak.Další informace naleznete v tématu Kvantifikátory. |
Zpět na začátek
Kategorie sady Unicode nebo blok sady Unicode: \p{}
Standard Unicode přiřadí každému znaku obecnou kategorii. Například může být určitý znak velké písmeno (představované kategorií Lu), desítková číslice (kategorie Nd), matematický symbol (kategorie Sm), nebo oddělovač odstavců (kategorie Zl). Určité množiny znaků sady Unicode zabírají také určité oblasti nebo bloky po sobě následujících kódových bodů. Například množina znaků základní Latinky se nalézá od \u0000 až do \u007F, zatímco množina znaků Arabštiny se nalézá od \u0600 až do \u06FF.
Konstrukce regulárního výrazu
\p{název}
porovnává s libovolným znakem, který patří do obecné kategorie sady Unicode nebo pojmenovaného blok, kde název je zkratka pro kategorii nebo název pojmenované bloku. Seznam zkratek kategorií naleznete v pozdějším oddílu tohoto tématu Podporované obecné kategorie sady Unicode. Seznam pojmenovaných bloků naleznete v pozdějším oddílu tohoto tématu Podporované pojmenované bloky.
V následujícím příkladu je použita konstrukce \p{název} tak, aby porovnávala jak obecnou kategorii sady Unicode (v tomto případě Pd, nebo kategorii interpunkčního znaménka či pomlčky), tak i pojmenovaný blok (pojmenované bloky IsGreek a IsBasicLatin).
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+"
Dim input As String = "Κατα Μαθθαίον - The Gospel of Matthew"
Console.WriteLine(Regex.IsMatch(input, pattern)) ' Displays True.
End Sub
End Module
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+";
string input = "Κατα Μαθθαίον - The Gospel of Matthew";
Console.WriteLine(Regex.IsMatch(input, pattern)); // Displays True.
}
}
Regulární výraz \b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+ je definován podle následující tabulky.
Maska |
Popis |
---|---|
\b |
Začne na hranici slova. |
\p{IsGreek}+ |
Porovná jeden nebo více znaků řecké abecedy. |
(\s)? |
Porovná žádný nebo jeden prázdný znak. |
(\p{IsGreek}+(\s)?)+ |
Porovná vzorek jednoho nebo více znaků řecké abecedy následovaný žádným nebo jedním prázdným znakem jednou nebo vícekrát. |
\p{Pd} |
Porovná se znakem interpunkce, svislé čáry. |
\s |
Porovná prázdný znak. |
\p{IsBasicLatin}+ |
Porovná s jedním nebo více znaky základní Latinky. |
(\s)? |
Porovná žádný nebo jeden prázdný znak. |
(\p{IsBasicLatin}+(\s)?)+ |
Porovná vzorek jednoho nebo více znaků základní latinky následovaný žádným nebo jedním prázdným znakem jednou nebo vícekrát. |
Zpět na začátek
Negativní kategorie sady Unicode nebo blok sady Unicode: \P{}
Standard Unicode přiřadí každému znaku obecnou kategorii. Například může být určitý znak velké písmeno (představované kategorií Lu), desítková číslice (kategorie Nd), matematický symbol (kategorie Sm), nebo oddělovač odstavců (kategorie Zl). Určité množiny znaků sady Unicode zabírají také určité oblasti nebo bloky po sobě následujících kódových bodů. Například množina znaků základní Latinky se nalézá od \u0000 až do \u007F, zatímco množina znaků Arabštiny se nalézá od \u0600 až do \u06FF.
Konstrukce regulárního výrazu
\P{název}
porovnává s libovolným znakem, který nepatří do obecné kategorie sady Unicode nebo pojmenovaného blok, kde název je zkratka pro kategorii nebo název pojmenované bloku. Seznam zkratek kategorií naleznete v pozdějším oddílu tohoto tématu Podporované obecné kategorie sady Unicode. Seznam pojmenovaných bloků naleznete v pozdějším oddílu tohoto tématu Podporované pojmenované bloky.
V následujícím příkladu je použita konstrukce \P{název} pro odebrání jakýchkoli symbolů měny (v tomto případě Sc nebo kategorie symbolu, měny) z číselných řetězců.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\P{Sc})+"
Dim values() As String = { "$164,091.78", "£1,073,142.68", "73¢", "€120"}
For Each value As String In values
Console.WriteLine(Regex.Match(value, pattern).Value)
Next
End Sub
End Module
' The example displays the following output:
' 164,091.78
' 1,073,142.68
' 73
' 120
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\P{Sc})+";
string[] values = { "$164,091.78", "£1,073,142.68", "73¢", "€120" };
foreach (string value in values)
Console.WriteLine(Regex.Match(value, pattern).Value);
}
}
// The example displays the following output:
// 164,091.78
// 1,073,142.68
// 73
// 120
Vzor regulárního výrazu (\P{Sc})+ porovnává jeden nebo více znaků, které nejsou symboly měny; efektivně odděluje libovolný symbol měny z výsledného řetězce.
Zpět na začátek
Slovní znak. \w
\w odpovídá libovolnému slovnímu znaku. Slovní znak je členem každé kategorie sady Unicode uvedených v následující tabulce.
Kategorie |
Popis |
---|---|
Ll |
písmeno, malé písmeno |
Lu |
písmeno, velké písmeno |
Lt |
písmeno, nadpisové písmeno |
Lo |
písmeno, jiné |
Lm |
písmeno, modifikátor |
Nd |
číslo, desítková číslice |
Pc |
interpunkce, spojka. Tato kategorie zahrnuje deset znaků, z nichž nejčastěji používaný je LOWLINE znak (_), u+005F. |
Pokud je specifikováno chování standardu ECMAScript, \w je ekvivalentní s [a-zA-Z_0-9]. Informace o regulárních výrazech jazyka ECMAScript naleznete v oddílu "ECMAScript chování porovnávání" v tématu Možnosti regulárních výrazů.
Poznámka |
---|
Protože odpovídá libovolnému slovnímu znaku, prvek jazyka \w se často používá s líný kvantifikátor, pokud se vzor regulárního výrazu pokusí porovnat libovolný slovní znak několikrát, následovaný určitým slovním znakem.Další informace naleznete v tématu Kvantifikátory. |
V následujícím příkladu je použit prvek jazyka \w tak, aby porovnával duplicitní slovní znaky. V příkladu je definován vzor regulárního výrazu (\w)\1, který lze interpretovat následujícím způsobem.
Prvek |
Popis |
---|---|
(\w) |
Porovnává slovní znak. Toto je první zachytávající skupina. |
\1 |
Porovnává hodnotu prvního zachycení. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\w)\1"
Dim words() As String = { "trellis", "seer", "latter", "summer", _
"hoarse", "lesser", "aardvark", "stunned" }
For Each word As String In words
Dim match As Match = Regex.Match(word, pattern)
If match.Success Then
Console.WriteLine("'{0}' found in '{1}' at position {2}.", _
match.Value, word, match.Index)
Else
Console.WriteLine("No double characters in '{0}'.", word)
End If
Next
End Sub
End Module
' The example displays the following output:
' 'll' found in 'trellis' at position 3.
' 'ee' found in 'seer' at position 1.
' 'tt' found in 'latter' at position 2.
' 'mm' found in 'summer' at position 2.
' No double characters in 'hoarse'.
' 'ss' found in 'lesser' at position 2.
' 'aa' found in 'aardvark' at position 0.
' 'nn' found in 'stunned' at position 3.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\w)\1";
string[] words = { "trellis", "seer", "latter", "summer",
"hoarse", "lesser", "aardvark", "stunned" };
foreach (string word in words)
{
Match match = Regex.Match(word, pattern);
if (match.Success)
Console.WriteLine("'{0}' found in '{1}' at position {2}.",
match.Value, word, match.Index);
else
Console.WriteLine("No double characters in '{0}'.", word);
}
}
}
// The example displays the following output:
// 'll' found in 'trellis' at position 3.
// 'ee' found in 'seer' at position 1.
// 'tt' found in 'latter' at position 2.
// 'mm' found in 'summer' at position 2.
// No double characters in 'hoarse'.
// 'ss' found in 'lesser' at position 2.
// 'aa' found in 'aardvark' at position 0.
// 'nn' found in 'stunned' at position 3.
Zpět na začátek
Mimoslovní znak: \W
\W odpovídá libovolnému mimoslovnímu znaku. Prvek jazyka \W je ekvivalentní s následující třídou znaků:
[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]
Jinými slovy, porovnává libovolný znak kromě těch, které jsou uvedeny v následující tabulce.
Kategorie |
Popis |
---|---|
Ll |
písmeno, malé písmeno |
Lu |
písmeno, velké písmeno |
Lt |
písmeno, nadpisové písmeno |
Lo |
písmeno, jiné |
Lm |
písmeno, modifikátor |
Nd |
číslo, desítková číslice |
Pc |
interpunkce, spojka. Tato kategorie zahrnuje deset znaků, z nichž nejčastěji používaný je LOWLINE znak (_), u+005F. |
Pokud je specifikováno chování standardu ECMAScript, \W je ekvivalentní s [^a-zA-Z_0-9]. Informace o regulárních výrazech jazyka ECMAScript naleznete v oddílu "ECMAScript chování porovnávání" v tématu Možnosti regulárních výrazů.
Poznámka |
---|
Protože odpovídá libovolnému mimoslovnímu znaku, prvek jazyka \W se často používá s líným kvantifikátor, pokud se vzor regulárního výrazu pokusí porovnat libovolný mimoslovní znak několikrát, následovaný určitým mimoslovním znakem.Další informace naleznete v tématu Kvantifikátory. |
Následující příklad ukazuje třídu znaků \w. Je definován vzor regulárního výrazu, \b(\w+)(\W){1,2}, který porovnává slovo následované jedním nebo více mimoslovními znaky, jako například prázdný znak či interpunkční znaménko. Regulární výraz je interpretován tak, jak je uvedeno v následující tabulce.
Prvek |
Popis |
---|---|
\b |
Začne porovnání na hranici slova. |
(\w+) |
Porovná jeden nebo více slovních znaků. Toto je první zachytávající skupina. |
(\w){1,2} |
Porovnává s mimoslovním znakem jednou nebo dvakrát. Toto je druhá zachytávající skupina. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\w+)(\W){1,2}"
Dim input As String = "The old, grey mare slowly walked across the narrow, green pasture."
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Console.Write(" Non-word character(s):")
Dim captures As CaptureCollection = match.Groups(2).Captures
For ctr As Integer = 0 To captures.Count - 1
Console.Write("'{0}' (\u{1}){2}", captures(ctr).Value, _
Convert.ToUInt16(captures(ctr).Value.Chars(0)).ToString("X4"), _
If(ctr < captures.Count - 1, ", ", ""))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' The
' Non-word character(s):' ' (\u0020)
' old,
' Non-word character(s):',' (\u002C), ' ' (\u0020)
' grey
' Non-word character(s):' ' (\u0020)
' mare
' Non-word character(s):' ' (\u0020)
' slowly
' Non-word character(s):' ' (\u0020)
' walked
' Non-word character(s):' ' (\u0020)
' across
' Non-word character(s):' ' (\u0020)
' the
' Non-word character(s):' ' (\u0020)
' narrow,
' Non-word character(s):',' (\u002C), ' ' (\u0020)
' green
' Non-word character(s):' ' (\u0020)
' pasture.
' Non-word character(s):'.' (\u002E)
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\w+)(\W){1,2}";
string input = "The old, grey mare slowly walked across the narrow, green pasture.";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine(match.Value);
Console.Write(" Non-word character(s):");
CaptureCollection captures = match.Groups[2].Captures;
for (int ctr = 0; ctr < captures.Count; ctr++)
Console.Write(@"'{0}' (\u{1}){2}", captures[ctr].Value,
Convert.ToUInt16(captures[ctr].Value[0]).ToString("X4"),
ctr < captures.Count - 1 ? ", " : "");
Console.WriteLine();
}
}
}
// The example displays the following output:
// The
// Non-word character(s):' ' (\u0020)
// old,
// Non-word character(s):',' (\u002C), ' ' (\u0020)
// grey
// Non-word character(s):' ' (\u0020)
// mare
// Non-word character(s):' ' (\u0020)
// slowly
// Non-word character(s):' ' (\u0020)
// walked
// Non-word character(s):' ' (\u0020)
// across
// Non-word character(s):' ' (\u0020)
// the
// Non-word character(s):' ' (\u0020)
// narrow,
// Non-word character(s):',' (\u002C), ' ' (\u0020)
// green
// Non-word character(s):' ' (\u0020)
// pasture.
// Non-word character(s):'.' (\u002E)
Protože objekt Group pro druhou zachytávající skupinu obsahuje pouze jediný zachycený mimoslovní znak, příklad načte všechny zachycené mimoslovní znaky z objektu CaptureCollection, který je vrácen vlastností Group.Captures.
Zpět na začátek
Prázdný znak: \s
\s odpovídá jakémukoli prázdnému znaku. Je ekvivalentní s uvozovacími sekvencemi a kategoriemi sady Unicode, které jsou uvedeny v následující tabulka.
Kategorie |
Popis |
---|---|
\f |
Znak nové stránky, \u000C. |
\n |
znak nového řádku, \u000A. |
\r |
návratový znak, \u000D. |
\t |
znak tabulátoru, \u0009. |
\v |
znak svislého tabulátoru, \u000B. |
\x85 |
znak tři tečky nebo znak NEXT LINE (NEL) (…), \u0085. |
\p{Z} |
Porovnává s jakýmkoli znakem oddělovače. |
Pokud je zadán chování standardu ECMAScript, \s je ekvivalentem [\f\n\r\t\v]. Informace o regulárních výrazech jazyka ECMAScript naleznete v oddílu "ECMAScript chování porovnávání" v tématu Možnosti regulárních výrazů.
Následující příklad ukazuje třídu znaků \s. Definuje vzor regulárního výrazu \b\w+(e)*s(\s|$), který porovnává slova končící na "s" nebo "es" následované prázdným znakem nebo koncem vstupního řetězce. Regulární výraz je interpretován tak, jak je uvedeno v následující tabulce.
Prvek |
Popis |
---|---|
\b |
Začne porovnání na hranici slova. |
\w+ |
Porovná jeden nebo více slovních znaků. |
(e)* |
Porovnává s "e" jednou nebo vůbec. |
s |
Porovnává s "s". |
(\s|$) |
Porovnává buď s prázdným znakem nebo s koncem vstupního řetězce. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b\w+(e)*s(\s|$)"
Dim input As String = "matches stores stops leave leaves"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' matches
' stores
' stops
' leaves
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b\w+(e)*s(\s|$)";
string input = "matches stores stops leave leaves";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// matches
// stores
// stops
// leaves
Zpět na začátek
Neprázdný znak. \S
\S odpovídá jakémukoli neprázdnému znaku. Je ekvivalentní vzoru regulárního výrazu [^\f\n\r\t\v\x85\p{Z}], nebo je opakem vzoru regulárního výrazu ekvivalentního s \s, který porovnává prázdné znaky. Další informace naleznete v tématu Prázdný znak: \s.
Pokud je specifikováno chování standardu ECMAScript, \S je ekvivalentní s [^ \f\n\r\t\v]. Informace o regulárních výrazech jazyka ECMAScript naleznete v oddílu "ECMAScript chování porovnávání" v tématu Možnosti regulárních výrazů.
Následující příklad ukazuje prvek jazyka \S. Vzor regulárního výrazu \b(\S+)\s* porovnává řetězce, které jsou odděleny prázdnými znaky. Druhý prvek v objektu GroupCollection shody obsahuje odpovídající řetězec. Vzor regulárního výrazu může být interpretován tak, jak je uvedeno v následující tabulce.
Prvek |
Popis |
---|---|
\b |
Začne porovnání na hranici slova. |
(\S+) |
Porovnává jeden nebo více prázdných znaků. Toto je první zachytávající skupina. |
\s* |
Porovná žádný nebo jeden prázdný znak. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\S+)\s*"
Dim input As String = "This is the first sentence of the first paragraph. " + _
"This is the second sentence." + vbCrLf + _
"This is the only sentence of the second paragraph."
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Groups(1))
Next
End Sub
End Module
' The example displays the following output:
' This
' is
' the
' first
' sentence
' of
' the
' first
' paragraph.
' This
' is
' the
' second
' sentence.
' This
' is
' the
' only
' sentence
' of
' the
' second
' paragraph.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\S+)\s*";
string input = "This is the first sentence of the first paragraph. " +
"This is the second sentence.\n" +
"This is the only sentence of the second paragraph.";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Groups[1]);
}
}
// The example displays the following output:
// This
// is
// the
// first
// sentence
// of
// the
// first
// paragraph.
// This
// is
// the
// second
// sentence.
// This
// is
// the
// only
// sentence
// of
// the
// second
// paragraph.
Zpět na začátek
Znak desítkové číslice: \d
\d odpovídá jakékoli desítkové číslici. Je ekvivalentní se vzorem regulárního výrazu \p{Nd}, který obsahuje standardní desítkové číslice 0-9 a desítkové číslice čísel několika jiných množin znaků.
Pokud je specifikováno chování standardu ECMAScript, \d je ekvivalentní s [0-9]. Informace o regulárních výrazech jazyka ECMAScript naleznete v oddílu "ECMAScript chování porovnávání" v tématu Možnosti regulárních výrazů.
Následující příklad ukazuje prvek jazyka \d. Testuje zda vstupní řetězec představuje platné telefonní číslo ve Spojených státech a Kanadě. Vzorce regulárního výrazu ^(\(*\d{3}\)*[\s-])*\d{3}-\d{4}$ je definován podle následující tabulky.
Prvek |
Popis |
---|---|
^ |
Zahájí porovnávání na začátku vstupního řetězce. |
\(* |
Porovnává jeden nebo žádný literální znak "(". |
\d{3} |
Porovná tři desítkové číslice. |
\)* |
Porovnává jeden nebo žádný literální znak ")". |
[\s-] |
Porovnává pomlčku nebo prázdný znak. |
(\(*\d{3}\)*[\s-])* |
Porovnává volitelnou levou závorku následovanou třemi desítkovými číslicemi, volitelnou pravou závorku a prázdný znak nebo pomlčku, jednou nebo vůbec. Toto je první zachytávající skupina. |
\d{3}=\d{4} |
Porovnává tři desítkové číslice následované pomlčkou a čtyřmi dalšími desítkovými číslicemi. |
$ |
Porovná konec vstupního řetězce. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^(\(*\d{3}\)*[\s-])*\d{3}-\d{4}$"
Dim inputs() As String = { "111 111-1111", "222-2222", "222 333-444", _
"(212) 111-1111", "111-AB1-1111", _
"212-111-1111", "01 999-9999" }
For Each input As String In inputs
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(input + ": matched")
Else
Console.WriteLine(input + ": match failed")
End If
Next
End Sub
End Module
' The example displays the following output:
' 111 111-1111: matched
' 222-2222: matched
' 222 333-444: match failed
' (212) 111-1111: matched
' 111-AB1-1111: match failed
' 212-111-1111: matched
' 01 999-9999: match failed
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(\(*\d{3}\)*[\s-])*\d{3}-\d{4}$";
string[] inputs = { "111 111-1111", "222-2222", "222 333-444",
"(212) 111-1111", "111-AB1-1111",
"212-111-1111", "01 999-9999" };
foreach (string input in inputs)
{
if (Regex.IsMatch(input, pattern))
Console.WriteLine(input + ": matched");
else
Console.WriteLine(input + ": match failed");
}
}
}
// The example displays the following output:
// 111 111-1111: matched
// 222-2222: matched
// 222 333-444: match failed
// (212) 111-1111: matched
// 111-AB1-1111: match failed
// 212-111-1111: matched
// 01 999-9999: match failed
Zpět na začátek
Nečíslicový znak: \D
\D tomuto řetězci odpovídá libovolný nečíslicový znak. Je ekvivalentní vzoru regulárního výrazu \p{Nd}.
Pokud je specifikováno chování standardu ECMAScript, \D je ekvivalentní s [^0-9]. Informace o regulárních výrazech jazyka ECMAScript naleznete v oddílu "ECMAScript chování porovnávání" v tématu Možnosti regulárních výrazů.
Následující příklad ukazuje prvek jazyka \D. Ověřuje se, zda se řetězec jako součást čísla skládá z vhodné kombinace desítkových znaků a znaků nedesítkových. Vzorce regulárního výrazu ^\D\d{1,5}\D*$ je definován podle následující tabulky.
Prvek |
Popis |
---|---|
^ |
Zahájí porovnávání na začátku vstupního řetězce. |
\D |
Porovná nečíslicový znak. |
\d{1,5} |
Porovná jedno až pět desítkových číslic. |
\D* |
Porovná jeden nebo žádný nedesítkový znak. |
$ |
Porovná konec vstupního řetězce. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^\D\d{1,5}\D*$"
Dim inputs() As String = { "A1039C", "AA0001", "C18A", "Y938518" }
For Each input As String In inputs
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(input + ": matched")
Else
Console.WriteLine(input + ": match failed")
End If
Next
End Sub
End Module
' The example displays the following output:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^\D\d{1,5}\D*$";
string[] inputs = { "A1039C", "AA0001", "C18A", "Y938518" };
foreach (string input in inputs)
{
if (Regex.IsMatch(input, pattern))
Console.WriteLine(input + ": matched");
else
Console.WriteLine(input + ": match failed");
}
}
}
// The example displays the following output:
// A1039C: matched
// AA0001: match failed
// C18A: matched
// Y938518: match failed
Zpět na začátek
Podporované obecné kategorie sady Unicode
Sada Unicode definuje obecné kategorie uvedené v následující tabulce. Další informace naleznete v tématu "Soubor formátu UCD" a "Obecné kategorie hodnoty" témata na Databáze znak Unicode.
Kategorie |
Popis |
---|---|
Lu |
písmeno, velké písmeno |
Ll |
písmeno, malé písmeno |
Lt |
písmeno, nadpisové písmeno |
Lm |
písmeno, modifikátor |
Lo |
písmeno, jiné |
L |
Všechny znaky písmena. To zahrnuje znaky Lu, Ll, Lt, Lma Lo. |
Mn |
značka, bez mezer |
Mc |
značka, kombinování mezer |
Me |
značka, uzavření |
M |
Všechny značky diakritických znamének. To zahrnuje Mn, Mc, a Me kategorie. |
Nd |
číslo, desítková číslice |
Nl |
číslo, písmeno |
No |
číslo, jiné |
N |
Všechna čísla. To zahrnuje Nd, Nl, a No kategorie. |
Pc |
interpunkce, spojka |
Pd |
interpunkce, pomlčka |
Ps |
interpunkce, otevřená |
Pe |
interpunkce, uzavřená |
Pi |
interpunkce, počáteční uvozovka (může se chovat jako Ps nebo Pe v závislosti na použití) |
Pf |
interpunkce, koncová uvozovka (může se chovat jako Ps nebo Pe v závislosti na použití) |
Po |
interpunkce, jiné |
P |
Všechny znaky interpunkce. To zahrnuje kategorie Pc, Pd, Ps, Pe, Pi, Pf a Po. |
Sm |
symbol, matematický |
Sc |
symbol, měny |
Sk |
symbol, modifikátor |
So |
symbol, jiný |
S |
Všechny symboly. To zahrnuje kategorie Sm, Sc, Sk a So. |
Zs |
oddělovač, mezera |
Zl |
oddělovač, řádku |
Zp |
oddělovač, odstavce |
Z |
Všechny znaky oddělovačů. To zahrnuje Zs, Zl, a Zp kategorie. |
Cc |
jiný, ovládací prvek |
Cf |
jiné, formát |
Cs |
jiný, náhradník |
Co |
jiný, soukromé použití |
Cn |
jiný, nepřiřazené (žádné znaky nemají tuto vlastnost) |
C |
Všechny znaky ovládacích prvků. To zahrnuje kategorie Cc, Cf, Cs, Co a Cn. |
Můžete určit kategorii sady Unicode z jakéhokoli určitého znaku předáním tohoto znaku metodě GetUnicodeCategory. V následujícím příkladu je použita metoda GetUnicodeCategory k určení kategorie každého prvku pole, které obsahuje vybrané znaky latinky.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim chars() As Char = { "a"c, "X"c, "8"c, ","c, " "c, ChrW(9), "!"c }
For Each ch As Char In chars
Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()), _
Char.GetUnicodeCategory(ch))
Next
End Sub
End Module
' The example displays the following output:
' 'a': LowercaseLetter
' 'X': UppercaseLetter
' '8': DecimalDigitNumber
' ',': OtherPunctuation
' '\ ': SpaceSeparator
' '\t': Control
' '!': OtherPunctuation
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
char[] chars = { 'a', 'X', '8', ',', ' ', '\u0009', '!' };
foreach (char ch in chars)
Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()),
Char.GetUnicodeCategory(ch));
}
}
// The example displays the following output:
// 'a': LowercaseLetter
// 'X': UppercaseLetter
// '8': DecimalDigitNumber
// ',': OtherPunctuation
// '\ ': SpaceSeparator
// '\t': Control
// '!': OtherPunctuation
Zpět na začátek
Podporované pojmenované bloky
Rozhraní .NET Framework poskytuje pojmenované bloky uvedeny v následující tabulce. Množina podporovaných pojmenovaných bloků je založena na sadě Unicode 4.0 a Perl 5.6.
Rozsah kódového bodu |
Název bloku |
---|---|
0000 - 007F |
IsBasicLatin |
0080 - 00FF |
IsLatin-1Supplement |
0100 - 017F |
IsLatinExtended-A |
0180 - 024F |
IsLatinExtended-B |
0250 - 02AF |
IsIPAExtensions |
02B0 - 02FF |
IsSpacingModifierLetters |
0300 - 036F |
IsCombiningDiacriticalMarks |
0370 - 03FF |
IsGreek -nebo- IsGreekandCoptic |
0400 - 04FF |
IsCyrillic |
0500 - 052F |
IsCyrillicSupplement |
0530 - 058F |
IsArmenian |
0590 - 05FF |
IsHebrew |
0600 - 06FF |
IsArabic |
0700 - 074F |
IsSyriac |
0780 - 07BF |
IsThaana |
0900 - 097F |
IsDevanagari |
0980 - 09FF |
IsBengali |
0A00 - 0A7F |
IsGurmukhi |
0A80 - 0AFF |
IsGujarati |
0B00 - 0B7F |
IsOriya |
0B80 - 0BFF |
IsTamil |
0 C 00 - 0C7F |
IsTelugu |
0 C 80 - 0CFF |
IsKannada |
0 D 00 - 0D7F |
IsMalayalam |
0 D 80 - 0DFF |
IsSinhala |
0E00 - 0E7F |
IsThai |
0E80 - 0EFF |
IsLao |
0F00 - 0FFF |
IsTibetan |
1000 - 109F |
IsMyanmar |
10A0 - 10FF |
IsGeorgian |
1100 - 11FF |
IsHangulJamo |
1200 - 137F |
IsEthiopic |
13A0 - 13FF |
IsCherokee |
1400 - 167F |
IsUnifiedCanadianAboriginalSyllabics |
1680 - 169F |
IsOgham |
16A0 - 16FF |
IsRunic |
1700 - 171F |
IsTagalog |
1720 - 173F |
IsHanunoo |
1740 - 175F |
IsBuhid |
1760 - 177F |
IsTagbanwa |
1780 - 17FF |
IsKhmer |
1800 - 18AF |
IsMongolian |
1900 - 194F |
IsLimbu |
1950 - 197F |
IsTaiLe |
19E0 - 19FF |
IsKhmerSymbols |
1 D 00 - 1D7F |
IsPhoneticExtensions |
1E00 - 1EFF |
IsLatinExtendedAdditional |
1F00 - 1FFF |
IsGreekExtended |
2000 - 206F |
IsGeneralPunctuation |
2070 - 209F |
IsSuperscriptsandSubscripts |
20A0 - 20CF |
IsCurrencySymbols |
20 D 0 - 20FF |
IsCombiningDiacriticalMarksforSymbols -nebo- IsCombiningMarksforSymbols |
2100 - 214F |
IsLetterlikeSymbols |
2150 - 218F |
IsNumberForms |
2190 - 21FF |
IsArrows |
2200 - 22FF |
IsMathematicalOperators |
2300 - 23FF |
IsMiscellaneousTechnical |
2400 - 243F |
IsControlPictures |
2440 - 245F |
IsOpticalCharacterRecognition |
2460 - 24FF |
IsEnclosedAlphanumerics |
2500 - 257F |
IsBoxDrawing |
2580 - 259F |
IsBlockElements |
25A0 - 25FF |
IsGeometricShapes |
2600 - 26FF |
IsMiscellaneousSymbols |
2700 - 27BF |
IsDingbats |
27 C 0 - 27EF |
IsMiscellaneousMathematicalSymbols-A |
27F0 - 27FF |
IsSupplementalArrows-A |
2800 - 28FF |
IsBraillePatterns |
2900 - 297F |
IsSupplementalArrows-B |
2980 - 29FF |
IsMiscellaneousMathematicalSymbols-B |
2A00 - 2AFF |
IsSupplementalMathematicalOperators |
2B00 - 2BFF |
IsMiscellaneousSymbolsandArrows |
2E80 - 2EFF |
IsCJKRadicalsSupplement |
2F00 - 2FDF |
IsKangxiRadicals |
2FF0 - 2FFF |
IsIdeographicDescriptionCharacters |
3000 - 303F |
IsCJKSymbolsandPunctuation |
3040 - 309F |
IsHiragana |
30A0 - 30FF |
IsKatakana |
3100 - 312F |
IsBopomofo |
3130 - 318F |
IsHangulCompatibilityJamo |
3190 - 319F |
IsKanbun |
31A0 - 31BF |
IsBopomofoExtended |
31F0 - 31FF |
IsKatakanaPhoneticExtensions |
3200 - 32FF |
IsEnclosedCJKLettersandMonths |
3300 - 33FF |
IsCJKCompatibility |
3400 - 4DBF |
IsCJKUnifiedIdeographsExtensionA |
4DC0 - 4DFF |
IsYijingHexagramSymbols |
4E00 - 9FFF |
IsCJKUnifiedIdeographs |
A000 - A48F |
IsYiSyllables |
A490 - A4CF |
IsYiRadicals |
AC00 - D7AF |
IsHangulSyllables |
D800 - DB7F |
IsHighSurrogates |
DB80 - DBFF |
IsHighPrivateUseSurrogates |
DC00 - DFFF |
IsLowSurrogates |
BYLO - F8FF |
IsPrivateUseneboIsPrivateUseArea |
F900 - FAFF |
IsCJKCompatibilityIdeographs |
FB00 - FB4F |
IsAlphabeticPresentationForms |
FB50 - FDFF |
IsArabicPresentationForms-A |
FE00 - FE0F |
IsVariationSelectors |
FE20 - FE2F |
IsCombiningHalfMarks |
FE30 - FE4F |
IsCJKCompatibilityForms |
FE50 - FE6F |
IsSmallFormVariants |
FE70 - FEFF |
IsArabicPresentationForms-B |
FF00 - FFEF |
IsHalfwidthandFullwidthForms |
FFF0 - FFFF |
IsSpecials |
Zpět na začátek
Odčítání tříd znaků
Třída znaků definuje množinu znaků. Odčítání třídy znaků získává množinu znaků, která je výsledkem vyloučením znaků jedné třídy znaků, které jsou obsaženy v jiné třídě znaků.
Výraz odčítání třídy znaků má následující tvar:
[base_group-[excluded_group]]
Hranaté závorky ([]) a pomlčka ()-) jsou povinné. base_group je skupina pozitivních nebo negativních znaků, tak jak jsou popsány v tabulce Syntaxe třídy znaků. Komponenta excluded_group je jiná skupina pozitivních nebo negativních znaků nebo jiný výraz odčítání třídy znaků (to znamená, že můžete vnořovat výrazy odčítání třídy znaků).
Předpokládejme například, že máte základní skupinu, která se skládá z rozsahu znaků od "a" až do "z". Chcete-li definovat množinu znaků, která se skládá ze základní skupiny kromě znaku "m", použijte [a-z-[m]]. Chcete-li definovat množinu znaků, která se skládá ze základní skupiny s výjimkou množiny znaků "d", "j" a "p", použijte [a-z-[djp]]. Chcete-li definovat množinu znaků, která se skládá ze základní skupiny s výjimkou rozsahu znaků od "m" až do "p", použijte [a-z-[m-p]].
Zvažte vnořený výraz odčítání třídy znaků [a-z-[d-w-[m-o]]]. Výraz je vyhodnocen od nejvnitřnějšího rozsahu znaků ven. První se rozsah znaků od "m" do "o" odečte od rozsahu znaků "d" až "w", která dává množinu znaků od "d" až "l" a "p" až "w". Tato množina je poté odečtena od rozsahu znaků od "a" až "z", která dává množinu znaků [abcmnoxyz].
Při odčítání třídy znaků můžete použít libovolnou třídu znaků. Chcete-li definovat množinu znaků, která obsahuje všechny znaky sady Unicode od \u0000 do \uFFFF s výjimkou prázdných znaků (\s), znaků v obecné kategorii interpunkčních znamének (\p{P}), znaků v pojmenovaném bloku IsGreek (\p{IsGreek}) a řídicího znaku sady Unicode NEXT LINE (\x85), použijte [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]].
Zvolte třídy znaků pro výraz odčítání třídy znaků, které budou poskytovat užitečné výsledky. Vyhněte se výrazu, jehož výsledkem jsou prázdné množiny znaků, které nemohou odpovídat ničemu nebo výrazu, který odpovídá původní základní skupině. Prázdná množina je například výsledkem výrazu [\p{IsBasicLatin}-[\x00-\x7F]], který odečte všechny znaky v rozsahu znaků IsBasicLatin od obecné kategorie IsBasicLatin. Podobně původní základní skupina je výsledkem výrazu [a-z-[0-9]]. Důvodem je, že základní skupina, která je rozsahem znaků písmen od "a" až do "z", neobsahuje žádné znaky ve vyloučené skupině, která je rozsahem znaků desítkových číslic od "0" až po "9".
Například následující regulární výraz definuje ^[0-9-[2468]]+$, který odpovídá nula a lichých číslic ve vstupní řetězec. Regulární výraz je interpretován tak, jak je uvedeno v následující tabulce.
Prvek |
Popis |
---|---|
^ |
Začne porovnávání na začátku vstupního řetězce. |
[0-9-[2468]]+ |
Porovnává jeden nebo více výskytů libovolného znaku od 0 do 9 s výjimkou 2, 4, 6 a 8. Jinými slovy odpovídat jedné nebo více výskytů nula nebo liché číslice. |
$ |
Ukončí porovnávání na konci vstupního řetězce. |
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim inputs() As String = { "123", "13579753", "3557798", "335599901" }
Dim pattern As String = "^[0-9-[2468]]+$"
For Each input As String In inputs
Dim match As Match = Regex.Match(input, pattern)
If match.Success Then Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' 13579753
' 335599901
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string[] inputs = { "123", "13579753", "3557798", "335599901" };
string pattern = @"^[0-9-[2468]]+$";
foreach (string input in inputs)
{
Match match = Regex.Match(input, pattern);
if (match.Success)
Console.WriteLine(match.Value);
}
}
}
// The example displays the following output:
// 13579753
// 335599901
Zpět na začátek