Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Reguljära uttryck i .NET innehåller tre olika språkkonstruktioner. Med den ena kan du aktivera eller inaktivera specifika matchningsalternativ mitt i ett mönster för reguljära uttryck. Med de återstående två kan du inkludera kommentarer i ett reguljärt uttryck.
Inlinjealternativ
Du kan ange eller inaktivera specifika mönstermatchningsalternativ för en del av ett reguljärt uttryck med hjälp av syntaxen
(?imnsx-imnsx)
Du listar de alternativ som du vill aktivera efter frågetecknet och de alternativ som du vill inaktivera efter minustecknet. I följande tabell beskrivs varje alternativ. Mer information om varje alternativ finns i Alternativ för reguljära uttryck.
Alternativ | Beskrivning |
---|---|
i |
Skiftlägesokänslig matchning. |
m |
Flerradsläge. |
n |
Endast explicita avbildningar. (Parenteser fungerar inte som insamlingsgrupper.) |
s |
Enkelradsläge. |
x |
Ignorera ej inkapslade blanksteg och tillåt kommentarer i x-läge. |
Alla ändringar i reguljära uttrycksalternativ som definierats av konstruktionen (?imnsx-imnsx)
gäller till slutet av den omslutande gruppen.
Anteckning
Konstruktionen (?imnsx-imnsx:
för underuttrycksgruppering)
ger identiska funktioner för en underuttryck. Mer information finns i Grupperingskonstruktioner.
I följande exempel används alternativen i
, n
och x
för att aktivera skiftlägesokänslighet och explicita fångster, samt för att ignorera blanksteg i reguljäruttrycksmönstret mitt i ett reguljärt uttryck.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern;
string input = "double dare double Double a Drooling dog The Dreaded Deep";
pattern = @"\b(D\w+)\s(d\w+)\b";
// Match pattern using default options.
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine(match.Value);
if (match.Groups.Count > 1)
for (int ctr = 1; ctr < match.Groups.Count; ctr++)
Console.WriteLine($" Group {ctr}: {match.Groups[ctr].Value}");
}
Console.WriteLine();
// Change regular expression pattern to include options.
pattern = @"\b(D\w+)(?ixn) \s (d\w+) \b";
// Match new pattern with options.
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine(match.Value);
if (match.Groups.Count > 1)
for (int ctr = 1; ctr < match.Groups.Count; ctr++)
Console.WriteLine($" Group {ctr}: '{match.Groups[ctr].Value}'");
}
}
}
// The example displays the following output:
// Drooling dog
// Group 1: Drooling
// Group 2: dog
//
// Drooling dog
// Group 1: 'Drooling'
// Dreaded Deep
// Group 1: 'Dreaded'
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String
Dim input As String = "double dare double Double a Drooling dog The Dreaded Deep"
pattern = "\b(D\w+)\s(d\w+)\b"
' Match pattern using default options.
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
If match.Groups.Count > 1 Then
For ctr As Integer = 1 To match.Groups.Count - 1
Console.WriteLine(" Group {0}: {1}", ctr, match.Groups(ctr).Value)
Next
End If
Next
Console.WriteLine()
' Change regular expression pattern to include options.
pattern = "\b(D\w+)(?ixn) \s (d\w+) \b"
' Match new pattern with options.
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
If match.Groups.Count > 1 Then
For ctr As Integer = 1 To match.Groups.Count - 1
Console.WriteLine(" Group {0}: '{1}'", ctr, match.Groups(ctr).Value)
Next
End If
Next
End Sub
End Module
' The example displays the following output:
' Drooling dog
' Group 1: Drooling
' Group 2: dog
'
' Drooling dog
' Group 1: 'Drooling'
' Dreaded Deep
' Group 1: 'Dreaded'
Exemplet definierar två reguljära uttryck. Den första, \b(D\w+)\s(d\w+)\b
, matchar två ord i följd som börjar med ett versalt D och ett litet d. Det andra reguljära uttrycket, \b(D\w+)(?ixn) \s (d\w+) \b
, använder infogade alternativ för att ändra det här mönstret enligt beskrivningen i följande tabell. En jämförelse av resultaten bekräftar effekten av konstruktionen (?ixn)
.
Mönster | Beskrivning |
---|---|
\b |
Börja vid en ordgräns. |
(D\w+) |
Matcha versalt "D" följt av ett eller flera ordtecken. Det här är den första fångstgruppen. |
(?ixn) |
Från och med nu, gör jämförelser skiftlägesokänsliga, gör endast explicita matchningar och ignorera mellanrum i mönstret för reguljära uttryck. |
\s |
Matcha ett blanktecken. |
(d\w+) |
Matcha ett stort eller litet "d" följt av ett eller flera tecken i ord. Den här gruppen samlas inte in eftersom n alternativet (explicit avbildning) har aktiverats. |
\b |
Hitta en ordgräns. |
Kommentar i textflödet
Med kommentarskonstruktionen (?#
)
kan du inkludera en infogad kommentar i ett reguljärt uttryck. Motorn för reguljära uttryck använder inte någon del av kommentaren i mönstermatchning, även om kommentaren ingår i strängen som returneras av Regex.ToString metoden. Kommentaren slutar vid den första avslutande parentesen.
I följande exempel upprepas det första reguljära uttrycksmönstret från exemplet i föregående avsnitt. Den lägger till två infogade kommentarer i det reguljära uttrycket för att ange om jämförelsen är skiftlägeskänslig. Mönster för reguljära uttryck, \b((?# case-sensitive comparison)D\w+)\s(?ixn)((?#case-insensitive comparison)d\w+)\b
, definieras på följande sätt.
Mönster | Beskrivning |
---|---|
\b |
Börja vid en ordgräns. |
(?# case-sensitive comparison) |
En kommentar. Det påverkar inte mönstermatchningsbeteendet. |
(D\w+) |
Matcha versalt "D" följt av ett eller flera ordtecken. Det här är den första fångstgruppen. |
\s |
Matcha ett blanktecken. |
(?ixn) |
Från och med nu, gör jämförelser skiftlägesokänsliga, gör endast explicita matchningar och ignorera mellanrum i mönstret för reguljära uttryck. |
(?#case-insensitive comparison) |
En kommentar. Det påverkar inte mönstermatchningsbeteendet. |
(d\w+) |
Matcha ett stort eller litet "d" följt av ett eller flera tecken i ord. Det här är den andra fångstgruppen. |
\b |
Hitta en ordgräns. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b((?# case-sensitive comparison)D\w+)\s(?ixn)((?#case-insensitive comparison)d\w+)\b";
Regex rgx = new Regex(pattern);
string input = "double dare double Double a Drooling dog The Dreaded Deep";
Console.WriteLine("Pattern: " + pattern.ToString());
// Match pattern using default options.
foreach (Match match in rgx.Matches(input))
{
Console.WriteLine(match.Value);
if (match.Groups.Count > 1)
{
for (int ctr = 1; ctr <match.Groups.Count; ctr++)
Console.WriteLine($" Group {ctr}: {match.Groups[ctr].Value}");
}
}
}
}
// The example displays the following output:
// Pattern: \b((?# case-sensitive comparison)D\w+)\s(?ixn)((?#case-insensitive comp
// arison)d\w+)\b
// Drooling dog
// Group 1: Drooling
// Dreaded Deep
// Group 1: Dreaded
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b((?# case-sensitive comparison)D\w+)\s(?ixn)((?#case-insensitive comparison)d\w+)\b"
Dim rgx As New Regex(pattern)
Dim input As String = "double dare double Double a Drooling dog The Dreaded Deep"
Console.WriteLine("Pattern: " + pattern.ToString())
' Match pattern using default options.
For Each match As Match In rgx.Matches(input)
Console.WriteLine(match.Value)
If match.Groups.Count > 1 Then
For ctr As Integer = 1 To match.Groups.Count - 1
Console.WriteLine(" Group {0}: {1}", ctr, match.Groups(ctr).Value)
Next
End If
Next
End Sub
End Module
' The example displays the following output:
' Pattern: \b((?# case-sensitive comparison)D\w+)\s(?ixn)((?#case-insensitive comp
' arison)d\w+)\b
' Drooling dog
' Group 1: Drooling
' Dreaded Deep
' Group 1: Dreaded
Kommentar från slutet av rad
Ett taltecken (#
) markerar en kommentar i x-läge som börjar med tecknet unescaped # i slutet av mönstret för reguljära uttryck och fortsätter till slutet av raden. Om du vill använda den här konstruktionen x
måste du antingen aktivera alternativet (via infogade alternativ) eller ange RegexOptions.IgnorePatternWhitespace värdet till parametern option
när du instansierar Regex objektet eller anropar en statisk Regex metod.
I följande exempel visas kommentarskonstruktionen i slutet av raden. Den avgör om en sträng är en sammansatt formatsträng som innehåller minst ett formatobjekt. I följande tabell beskrivs konstruktionerna i det reguljära uttrycksmönstret:
\{\d+(,-*\d+)*(\:\w{1,4}?)*\}(?x) # Looks for a composite format item.
Mönster | Beskrivning |
---|---|
\{ |
Matcha en inledande klammerparentes. |
\d+ |
Matcha en eller flera decimaler. |
(,-*\d+)* |
Matcha noll eller en förekomst av ett kommatecken följt av ett valfritt minustecken följt av en eller flera decimaler. |
(\:\w{1,4}?)* |
Matcha noll eller en förekomst av ett kolon följt av ett till fyra, men så få som möjligt, blankstegstecken. |
\} |
Matcha en avslutande klammerparentes. |
(?x) |
Aktivera alternativet ignorera mönstret tomt utrymme så att kommentaren i slutet av raden identifieras. |
# Looks for a composite format item. |
En kommentar i slutet av raden. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\{\d+(,-*\d+)*(\:\w{1,4}?)*\}(?x) # Looks for a composite format item.";
string input = "{0,-3:F}";
Console.WriteLine($"'{input}':");
if (Regex.IsMatch(input, pattern))
Console.WriteLine(" contains a composite format item.");
else
Console.WriteLine(" does not contain a composite format item.");
}
}
// The example displays the following output:
// '{0,-3:F}':
// contains a composite format item.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\{\d+(,-*\d+)*(\:\w{1,4}?)*\}(?x) # Looks for a composite format item."
Dim input As String = "{0,-3:F}"
Console.WriteLine("'{0}':", input)
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(" contains a composite format item.")
Else
Console.WriteLine(" does not contain a composite format item.")
End If
End Sub
End Module
' The example displays the following output:
' '{0,-3:F}':
' contains a composite format item.
Observera att kommentaren, istället för att tillhandahålla konstruktionen (?x)
i det reguljära uttrycket, också kunde ha identifierats genom att anropa metoden Regex.IsMatch(String, String, RegexOptions) och skicka RegexOptions.IgnorePatternWhitespace-uppräkningsvärdet.