Dela via


Teckenklasser i reguljära uttryck

En teckenklass definierar en uppsättning tecken, av vilka någon kan förekomma i en indatasträng för att en matchning ska lyckas. Det reguljära uttrycksspråket i .NET stöder följande teckenklasser:

  • Positiva teckengrupper. Ett tecken i indatasträngen måste matcha ett av en angiven uppsättning tecken. Mer information finns i Positiv teckengrupp.

  • Negativa teckengrupper. Ett tecken i indatasträngen får inte matcha något av en angiven uppsättning tecken. Mer information finns i Negativ teckengrupp.

  • Alla tecken. Tecknet . (punkt eller punkt) i ett reguljärt uttryck är ett jokertecken som matchar alla tecken utom \n. Mer information finns i Alla tecken.

  • En allmän Unicode-kategori eller ett namngivet block. Ett tecken i indatasträngen måste vara medlem i en viss Unicode-kategori eller ligga inom ett sammanhängande intervall med Unicode-tecken för att en matchning ska lyckas. Mer information finns i Unicode-kategori eller Unicode-block.

  • En negativ allmän Unicode-kategori eller namngivet block. Ett tecken i indatasträngen får inte vara medlem i en viss Unicode-kategori eller så får det inte ligga inom ett sammanhängande intervall med Unicode-tecken för att en matchning ska lyckas. Mer information finns i Negativ Unicode-kategori eller Unicode-block.

  • Ett ordtecken. Ett tecken i indatasträngen kan tillhöra någon av de Unicode-kategorier som är lämpliga för tecken i ord. Mer information finns i Word-tecken.

  • Ett tecken som inte är ord. Ett tecken i indatasträngen kan tillhöra valfri Unicode-kategori som inte är ett ordtecken. Mer information finns i Tecken som inte är ord.

  • Ett blankstegstecken. Ett tecken i indatasträngen kan vara valfritt Unicode-avgränsningstecken, samt ett av ett antal kontrolltecken. Mer information finns i Blankstegstecken.

  • Ett icke-blankstegstecken. Ett tecken i indatasträngen kan vara ett tecken som inte är ett blankstegstecken. Mer information finns i Icke-blankstegstecken.

  • En decimalsiffra. Ett tecken i indatasträngen kan vara valfritt antal tecken som klassificeras som Unicode-decimaler. Mer information finns i Decimaltecken.

  • En icke-decimalsiffra. Ett tecken i indatasträngen kan vara något annat än en Unicode-decimalsiffra. Mer information finns i Decimaltecken.

.NET stöder subtraktionsuttryck för teckenklass, vilket gör att du kan definiera en uppsättning tecken som ett resultat av att utesluta en teckenklass från en annan teckenklass. Mer information finns i Subtraktion för teckenklass.

Kommentar

Teckenklasser som matchar tecken efter kategori, till exempel \w för att matcha ordtecken eller \p{} för att matcha en Unicode-kategori, förlitar sig på CharUnicodeInfo klassen för att ge information om teckenkategorier. I .NET Framework 4.6.2 och senare versioner baseras teckenkategorierna på Unicode Standard, version 8.0.0.

Positiv teckengrupp: [ ]

En positiv teckengrupp anger en lista med tecken, av vilka någon kan visas i en indatasträng för att en matchning ska inträffa. Den här listan med tecken kan anges individuellt, som ett intervall eller båda.

Syntaxen för att ange en lista över enskilda tecken är följande:

[*character_group*]

där character_group är en lista över de enskilda tecken som kan visas i indatasträngen för att en matchning ska lyckas. character_group kan bestå av en kombination av ett eller flera literaltecken, escape-tecken eller teckenklasser.

Syntaxen för att ange ett teckenintervall är följande:

[firstCharacter-lastCharacter]

där firstCharacter är tecknet som börjar intervallet och lastCharacter är tecknet som avslutar intervallet. Ett teckenintervall är en sammanhängande serie med tecken som definieras genom att ange det första tecknet i serien, ett bindestreck (-) och sedan det sista tecknet i serien. Två tecken är sammanhängande om de har intilliggande Unicode-kodpunkter. firstCharacter måste vara tecknet med den nedre kodpunkten, och lastCharacter måste vara tecknet med den högre kodpunkten.

Kommentar

Eftersom en positiv teckengrupp kan innehålla både en uppsättning tecken och ett teckenintervall tolkas alltid ett bindestreck (-) som intervallavgränsare om det inte är det första eller sista tecknet i gruppen.

Om du vill inkludera ett bindestreck som en icke-perifer medlem i en teckengrupp kan du undvika det. Om du till exempel vill skapa en teckengrupp för tecknet a och tecknen från - till /är [a\--/]rätt syntax .

Några vanliga mönster för reguljära uttryck som innehåller positiva teckenklasser visas i följande tabell.

Mönster beskrivning
[aeiou] Matcha alla vokaler.
[\p{P}\d] Matcha alla skiljetecken och decimaltecken.
[\s\p{P}] Matcha allt tomt utrymme och skiljetecken.

I följande exempel definieras en positiv teckengrupp som innehåller tecknen "a" och "e" så att indatasträngen måste innehålla orden "grå" eller "grå" följt av ett annat ord för att en matchning ska ske.

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.'
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.'

Det reguljära uttrycket gr[ae]y\s\S+?[\s|\p{P}] definieras på följande sätt:

Mönster beskrivning
gr Matcha de literala tecknen "gr".
[ae] Matcha antingen ett "a" eller ett "e".
y\s Matcha literaltecknet "y" följt av ett blankstegstecken.
\S+? Matcha ett eller flera icke-blankstegstecken, men så få som möjligt.
[\s\p{P}] Matcha antingen ett blankstegstecken eller ett skiljetecken.

Följande exempel matchar ord som börjar med valfri versal bokstav. Den använder underuttryck [A-Z] för att representera intervallet med versaler från A till Z.

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
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

Det reguljära uttrycket \b[A-Z]\w*\b definieras enligt följande tabell.

Mönster beskrivning
\b Börja vid en ordgräns.
[A-Z] Matcha versaler från A till Z.
\w* Matcha noll eller fler ordtecken.
\b Matcha en ordgräns.

Negativ teckengrupp: [^]

En negativ teckengrupp anger en lista med tecken som inte får visas i en indatasträng för att en matchning ska ske. Listan med tecken kan anges individuellt, som ett intervall eller båda.

Syntaxen för att ange en lista över enskilda tecken är följande:

[*^character_group*]

där character_group är en lista över enskilda tecken som inte kan visas i indatasträngen för att en matchning ska lyckas. character_group kan bestå av en kombination av ett eller flera literaltecken, escape-tecken eller teckenklasser.

Syntaxen för att ange ett teckenintervall är följande:

[^*firstCharacter*-*lastCharacter*]

där firstCharacter är tecknet som börjar intervallet och lastCharacter är tecknet som avslutar intervallet. Ett teckenintervall är en sammanhängande serie med tecken som definieras genom att ange det första tecknet i serien, ett bindestreck (-) och sedan det sista tecknet i serien. Två tecken är sammanhängande om de har intilliggande Unicode-kodpunkter. firstCharacter måste vara tecknet med den nedre kodpunkten, och lastCharacter måste vara tecknet med den högre kodpunkten.

Kommentar

Eftersom en negativ teckengrupp kan innehålla både en uppsättning tecken och ett teckenintervall tolkas ett bindestreck (-) alltid som intervallavgränsare om det inte är det första eller sista tecknet i gruppen.

Två eller flera teckenintervall kan sammanfogas. Om du till exempel vill ange intervallet med decimalsiffror från "0" till "9" använder [0-9a-fA-F]du intervallet med gemener från "a" till "f" och intervallet med versaler från "A" till "F".

Det inledande karaktertecknet (^) i en negativ teckengrupp är obligatoriskt och anger att teckengruppen är en negativ teckengrupp i stället för en positiv teckengrupp.

Viktigt!

En negativ teckengrupp i ett större mönster för reguljära uttryck är inte en försäkran med noll bredd. Efter att ha utvärderat den negativa teckengruppen avancerar motorn för reguljära uttryck ett tecken i indatasträngen.

Några vanliga mönster för reguljära uttryck som innehåller negativa teckengrupper visas i följande tabell.

Mönster beskrivning
[^aeiou] Matcha alla tecken utom vokaler.
[^\p{P}\d] Matcha alla tecken utom skiljetecken och decimaltecken.

Följande exempel matchar alla ord som börjar med tecknen "th" och som inte följs av ett "o".

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
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

Det reguljära uttrycket \bth[^o]\w+\b definieras enligt följande tabell.

Mönster beskrivning
\b Börja vid en ordgräns.
th Matcha de literala tecknen "th".
[^o] Matcha alla tecken som inte är ett "o".
\w+ Matcha ett eller flera ordtecken.
\b Avsluta vid en ordgräns.

Alla tecken: .

Periodtecknet (.) matchar alla tecken utom \n (det nya radtecknet) med följande två kvalifikationer:

  • Om ett mönster för reguljära uttryck ändras av RegexOptions.Singleline alternativet, eller om den del av mönstret som innehåller teckenklassen . ändras av s alternativet, . matchar alla tecken. Mer information finns i Alternativ för reguljära uttryck.

    I följande exempel visas det olika beteendet för teckenklassen . som standard och med alternativet RegexOptions.Singleline . Det reguljära uttrycket ^.+ börjar i början av strängen och matchar varje tecken. Som standard slutar matchningen i slutet av den första raden. det reguljära uttrycksmönstret matchar vagnreturtecknet, \r, men det matchar \ninte . Eftersom alternativet RegexOptions.Singleline tolkar hela indatasträngen som en enda rad matchar det varje tecken i indatasträngen, inklusive \n.

    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\.
    
    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\.
    

Kommentar

Eftersom det matchar alla tecken förutom \nmatchar \r även teckenklassen . (vagnreturtecknet).

  • I en positiv eller negativ teckengrupp behandlas en punkt som ett literalt periodtecken och inte som en teckenklass. Mer information finns i Positiv teckengrupp och Negativ teckengrupp tidigare i det här avsnittet. I följande exempel visas en bild genom att definiera ett reguljärt uttryck som innehåller periodtecknet (.) både som en teckenklass och som medlem i en positiv teckengrupp. Det reguljära uttrycket \b.*[.?!;:](\s|\z) börjar vid en ordgräns, matchar alla tecken tills det stöter på ett av fem skiljetecken, inklusive en punkt, och matchar sedan antingen ett blankstegstecken eller slutet av strängen.

    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.
    
    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.
    

Kommentar

Eftersom det matchar alla tecken . används språkelementet ofta med en lat kvantifierare om ett reguljärt uttrycksmönster försöker matcha ett tecken flera gånger. Mer information finns i Kvantifierare.

Unicode-kategori eller Unicode-block: \p{}

Unicode-standarden tilldelar varje tecken en allmän kategori. Ett visst tecken kan till exempel vara en versal bokstav (representerad av Lu kategorin), en decimalsiffra ( Nd kategorin), en matematisk symbol ( Sm kategorin) eller en styckeavgränsare ( Zl kategorin). Specifika teckenuppsättningar i Unicode-standarden upptar också ett visst intervall eller block med på varandra följande kodpunkter. Till exempel finns den grundläggande latinska teckenuppsättningen från \u0000 till \u007F, medan den arabiska teckenuppsättningen hittas från \u0600 till \u06FF.

Konstruktionen för reguljära uttryck

\p{Namn }

matchar alla tecken som tillhör en allmän Unicode-kategori eller ett namngivet block, där namnet är kategoriförkortningen eller det namngivna blocknamnet. En lista över kategoriförkortningar finns i avsnittet Unicode Allmänna kategorier som stöds senare i det här avsnittet. En lista över namngivna block finns i avsnittet Namngivna block som stöds senare i det här avsnittet.

Dricks

Matchningen kan förbättras om strängen först normaliseras genom att anropa String.Normalize metoden.

I följande exempel används namnkonstruktionen \p{} för att matcha både en allmän Unicode-kategori (i det här fallet Pd, eller Skiljetecken, Streckkategori) och ett namngivet block (och IsBasicLatin IsGreek namngivna block).

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.
   }
}
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

Det reguljära uttrycket \b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+ definieras enligt följande tabell.

Mönster beskrivning
\b Börja vid en ordgräns.
\p{IsGreek}+ Matcha ett eller flera grekiska tecken.
(\s)? Matcha noll eller ett blankstegstecken.
(\p{IsGreek}+(\s)?)+ Matcha mönstret för ett eller flera grekiska tecken följt av noll eller ett blankstegstecken en eller flera gånger.
\p{Pd} Matcha ett skiljetecken, strecktecken.
\s Matcha ett blankstegstecken.
\p{IsBasicLatin}+ Matcha ett eller flera grundläggande latinska tecken.
(\s)? Matcha noll eller ett blankstegstecken.
(\p{IsBasicLatin}+(\s)?)+ Matcha mönstret för ett eller flera grundläggande latinska tecken följt av noll eller ett blankstegstecken en eller flera gånger.

Negativ Unicode-kategori eller Unicode-block: \P{}

Unicode-standarden tilldelar varje tecken en allmän kategori. Ett visst tecken kan till exempel vara en versal bokstav (representerad av Lu kategorin), en decimalsiffra ( Nd kategorin), en matematisk symbol ( Sm kategorin) eller en styckeavgränsare ( Zl kategorin). Specifika teckenuppsättningar i Unicode-standarden upptar också ett visst intervall eller block med på varandra följande kodpunkter. Till exempel finns den grundläggande latinska teckenuppsättningen från \u0000 till \u007F, medan den arabiska teckenuppsättningen hittas från \u0600 till \u06FF.

Konstruktionen för reguljära uttryck

\P{Namn }

matchar alla tecken som inte tillhör en allmän Unicode-kategori eller ett namngivet block, där namnet är kategoriförkortningen eller det namngivna blocknamnet. En lista över kategoriförkortningar finns i avsnittet Unicode Allmänna kategorier som stöds senare i det här avsnittet. En lista över namngivna block finns i avsnittet Namngivna block som stöds senare i det här avsnittet.

Dricks

Matchningen kan förbättras om strängen först normaliseras genom att anropa String.Normalize metoden.

I följande exempel används namnkonstruktionen \P{}för att ta bort alla valutasymboler (i det här fallet Sckategorin , eller Symbol, Valuta) från numeriska strängar.

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
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

Mönster för (\P{Sc})+ reguljära uttryck matchar ett eller flera tecken som inte är valutasymboler. Det tar effektivt bort alla valutasymboler från resultatsträngen.

Ordtecken: \w

\w matchar alla ordtecken. Ett ordtecken är medlem i någon av de Unicode-kategorier som anges i följande tabell.

Kategori beskrivning
Ll Bokstav, gemener
Lu Bokstav, versaler
Lt Bokstav, rubrik
Lo Bokstav, övrigt
Lm Letter, Modifier
Mn Markera, icke-avstånd
Nd Tal, decimaltal
Pc Skiljetecken, anslutningsprogram. Den här kategorin innehåller tio tecken, varav den vanligaste är LOWLINE-tecknet (_), u+005F.

Om ECMAScript-kompatibelt beteende anges \w motsvarar det [a-zA-Z_0-9]. Information om vanliga ECMAScript-uttryck finns i avsnittet "ECMAScript Matching Behavior" i Alternativ för reguljära uttryck.

Kommentar

Eftersom det matchar ordtecken \w används språkelementet ofta med en lat kvantifierare om ett reguljärt uttrycksmönster försöker matcha ordtecken flera gånger, följt av ett specifikt ordtecken. Mer information finns i Kvantifierare.

I följande exempel används \w språkelementet för att matcha duplicerade tecken i ett ord. Exemplet definierar ett mönster för reguljära uttryck, (\w)\1, som kan tolkas på följande sätt.

Element Description
(\w) Matcha ett ordtecken. Det här är den första insamlingsgruppen.
\1 Matcha värdet för den första avbildningen.
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.
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.

Tecken som inte är ord: \W

\W matchar alla tecken som inte är ord. Språkelementet \W motsvarar följande teckenklass:

[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]

Med andra ord matchar det alla tecken förutom de i Unicode-kategorierna som anges i följande tabell.

Kategori beskrivning
Ll Bokstav, gemener
Lu Bokstav, versaler
Lt Bokstav, rubrik
Lo Bokstav, övrigt
Lm Letter, Modifier
Mn Markera, icke-avstånd
Nd Tal, decimaltal
Pc Skiljetecken, anslutningsprogram. Den här kategorin innehåller tio tecken, varav den vanligaste är LOWLINE-tecknet (_), u+005F.

Om ECMAScript-kompatibelt beteende anges \W motsvarar det [^a-zA-Z_0-9]. Information om vanliga ECMAScript-uttryck finns i avsnittet "ECMAScript Matching Behavior" i Alternativ för reguljära uttryck.

Kommentar

Eftersom det matchar tecken som inte är ord \W används språkelementet ofta med en lat kvantifierare om ett reguljärt uttrycksmönster försöker matcha tecken som inte är ord flera gånger följt av ett specifikt icke-ordtecken. Mer information finns i Kvantifierare.

I följande exempel visas teckenklassen \W . Det definierar ett mönster för reguljära uttryck, \b(\w+)(\W){1,2}, som matchar ett ord följt av ett eller två tecken som inte är ord, till exempel blanksteg eller skiljetecken. Det reguljära uttrycket tolkas som det visas i följande tabell.

Element Description
\b Starta matchningen vid en ordgräns.
(\w+) Matcha ett eller flera ordtecken. Det här är den första insamlingsgruppen.
(\W){1,2} Matcha ett icke-ordtecken antingen en eller två gånger. Det här är den andra insamlingsgruppen.
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)
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)

Group Eftersom objektet för den andra insamlingsgruppen endast innehåller ett enda insamlat icke-ordtecken hämtar exemplet alla insamlade icke-ordtecken från objektet CaptureCollection som returneras av Group.Captures egenskapen.

Blankstegstecken: \s

\s matchar alla blankstegstecken. Det motsvarar escape-sekvenserna och Unicode-kategorierna som anges i följande tabell.

Kategori beskrivning
\f Formulärflödestecknet \u000C.
\n Det nya tecknet\u000A.
\r Vagnreturtecknet \u000D.
\t Tabbtecknet \u0009.
\v Det lodräta fliktecknet \u000B.
\x85 Tecknet NÄSTA RAD (NEL), \u0085.
\p{Z} Matchar alla avgränsartecken. Detta inkluderar Zskategorierna , Zloch Zp .

Om ECMAScript-kompatibelt beteende anges \s motsvarar det [ \f\n\r\t\v]. Information om vanliga ECMAScript-uttryck finns i avsnittet "ECMAScript Matching Behavior" i Alternativ för reguljära uttryck.

I följande exempel visas teckenklassen \s . Det definierar ett mönster för reguljära uttryck, \b\w+(e)?s(\s|$), som matchar ett ord som slutar med antingen "s" eller "es" följt av antingen ett blankstegstecken eller slutet av indatasträngen. Det reguljära uttrycket tolkas som det visas i följande tabell.

Element Description
\b Starta matchningen vid en ordgräns.
\w+ Matcha ett eller flera ordtecken.
(e)? Matcha ett "e" antingen noll eller en gång.
s Matcha ett "s".
(\s|$) Matcha antingen ett blankstegstecken eller slutet av indatasträngen.
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
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

Icke-blankstegstecken: \S

\S matchar alla tecken som inte är blanksteg. Det motsvarar det [^\f\n\r\t\v\x85\p{Z}] reguljära uttrycksmönstret, eller motsatsen till \sdet reguljära uttrycksmönstret som motsvarar , som matchar blankstegstecken. Mer information finns i Blankstegstecken: \s.

Om ECMAScript-kompatibelt beteende anges \S motsvarar det [^ \f\n\r\t\v]. Information om vanliga ECMAScript-uttryck finns i avsnittet "ECMAScript Matching Behavior" i Alternativ för reguljära uttryck.

I följande exempel visas \S språkelementet. Mönster för \b(\S+)\s? reguljära uttryck matchar strängar som avgränsas med blankstegstecken. Det andra elementet i matchningens GroupCollection objekt innehåller den matchade strängen. Det reguljära uttrycket kan tolkas enligt följande tabell.

Element Description
\b Starta matchningen vid en ordgräns.
(\S+) Matcha ett eller flera tecken som inte är blanksteg. Det här är den första insamlingsgruppen.
\s? Matcha noll eller ett blankstegstecken.
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.
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.

Decimaltecken: \d

\d matchar valfri decimalsiffra. Det motsvarar \p{Nd} mönstret för reguljära uttryck, som innehåller standard decimaltalen 0–9 samt decimaltalen i ett antal andra teckenuppsättningar.

Om ECMAScript-kompatibelt beteende anges \d motsvarar det [0-9]. Information om vanliga ECMAScript-uttryck finns i avsnittet "ECMAScript Matching Behavior" i Alternativ för reguljära uttryck.

I följande exempel visas \d språkelementet. Den testar om en indatasträng representerar ett giltigt telefonnummer i USA och Kanada. Mönster för ^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$ reguljära uttryck definieras enligt följande tabell.

Element Description
^ Börja matchningen i början av indatasträngen.
\(? Matcha noll eller ett literalt (-tecken.
\d{3} Matcha tre decimalsiffror.
\)? Matcha tecknet noll eller en literal ()).
[\s-] Matcha ett bindestreck eller ett blankstegstecken.
(\(?\d{3}\)?[\s-])? Matcha en valfri inledande parentes följt av tre decimalsiffror, en valfri avslutande parentes och antingen ett blankstegstecken eller ett bindestreck noll eller en gång. Det här är den första insamlingsgruppen.
\d{3}-\d{4} Matcha tre decimalsiffror följt av ett bindestreck och ytterligare fyra decimalsiffror.
$ Matcha slutet av indatasträngen.
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
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

Icke-siffrigt tecken: \D

\D matchar alla icke-siffriga tecken. Det motsvarar det reguljära uttrycksmönstret \P{Nd} .

Om ECMAScript-kompatibelt beteende anges \D motsvarar det [^0-9]. Information om vanliga ECMAScript-uttryck finns i avsnittet "ECMAScript Matching Behavior" i Alternativ för reguljära uttryck.

I följande exempel visas språkelementet \D. Den testar om en sträng, till exempel ett delnummer, består av en lämplig kombination av decimaltecken och icke-decimaltecken. Mönster för ^\D\d{1,5}\D*$ reguljära uttryck definieras enligt följande tabell.

Element Description
^ Börja matchningen i början av indatasträngen.
\D Matcha ett icke-siffrigt tecken.
\d{1,5} Matcha från en till fem decimalsiffror.
\D* Matcha noll, ett eller flera icke-decimaltecken.
$ Matcha slutet av indatasträngen.
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
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:

Unicode-allmänna kategorier som stöds

Unicode definierar de allmänna kategorier som anges i följande tabell. Mer information finns i underavsnitten "UCD-filformat" och "Allmänna kategorivärden" i Unicode-teckendatabasen, s. 5.7.1, tabell 12.

Kategori beskrivning
Lu Bokstav, versaler
Ll Bokstav, gemener
Lt Bokstav, rubrik
Lm Letter, Modifier
Lo Bokstav, övrigt
L Alla bokstavstecken. Detta inkluderar Lutecknen , Ll, Lt, Lmoch Lo .
Mn Markera, icke-avstånd
Mc Markera, kombinera avstånd
Me Mark, Enclosing
M Alla kombinera märken. Detta inkluderar Mnkategorierna , Mcoch Me .
Nd Tal, decimaltal
Nl Nummer, bokstav
No Tal, övrigt
N Alla tal. Detta inkluderar Ndkategorierna , Nloch No .
Pc Skiljetecken, anslutningsprogram
Pd Skiljetecken, streck
Ps Skiljetecken, Öppna
Pe Skiljetecken, Stäng
Pi Skiljetecken, inledande citattecken (kan bete sig som Ps eller Pe beroende på användning)
Pf Skiljetecken, slutcitat (kan bete sig som Ps eller Pe beroende på användning)
Po Skiljetecken, övrigt
P Alla skiljetecken. Detta inkluderar Pckategorierna , Pd, Ps, Pe, Pioch PfPo .
Sm Symbol, matematik
Sc Symbol, valuta
Sk Symbol, modifierare
So Symbol, övrigt
S Alla symboler. Detta inkluderar Smkategorierna , Sc, Skoch So .
Zs Avgränsare, blanksteg
Zl Avgränsare, linje
Zp Avgränsare, stycke
Z Alla avgränsartecken. Detta inkluderar Zskategorierna , Zloch Zp .
Cc Övrigt, Kontroll
Cf Övrigt, formatera
Cs Övrigt, Surrogat
Co Övrigt privat bruk
Cn Annan, Ej tilldelad eller Icke-character
C Alla andra tecken. Detta inkluderar Cckategorierna , Cf, Cs, Cooch Cn .

Du kan fastställa Unicode-kategorin för ett visst tecken genom att skicka det tecknet till GetUnicodeCategory metoden. I följande exempel används GetUnicodeCategory metoden för att fastställa kategorin för varje element i en matris som innehåller markerade latinska tecken.

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
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

Namngivna block som stöds

.NET innehåller de namngivna blocken som anges i följande tabell. Uppsättningen namngivna block som stöds baseras på Unicode 4.0 och Perl 5.6. Ett reguljärt uttryck som använder namngivna block finns i avsnittet Unicode-kategori eller Unicode-block: \p{} .

Kodpunktsintervall Blockera namn
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

-eller-

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
0C00 – 0C7F IsTelugu
0C80 – 0CFF IsKannada
0D00 – 0D7F IsMalayalam
0D80 – 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
1D00 – 1D7F IsPhoneticExtensions
1E00 – 1EFF IsLatinExtendedAdditional
1F00 – 1FFF IsGreekExtended
2000 - 206F IsGeneralPunctuation
2070 - 209F IsSuperscriptsandSubscripts
20A0 – 20CF IsCurrencySymbols
20D0 – 20FF IsCombiningDiacriticalMarksforSymbols

-eller-

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
27C0 – 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
E000 – F8FF IsPrivateUse eller IsPrivateUseArea
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

Subtraktion för teckenklass: [base_group - [excluded_group]]

En teckenklass definierar en uppsättning tecken. Subtraktion av teckenklass ger en uppsättning tecken som är resultatet av att undanta tecknen i en teckenklass från en annan teckenklass.

Ett subtraktionsuttryck för teckenklass har följande formulär:

[ -[ base_group excluded_group ]]

Hakparenteser ([]) och bindestreck (-) är obligatoriska. Base_group är en positiv teckengrupp eller en negativ teckengrupp. Den excluded_group komponenten är en annan positiv eller negativ teckengrupp, eller ett annat subtraktionsuttryck för teckenklass (dvs. du kan kapsla subtraktionsuttryck för teckenklass).

Anta till exempel att du har en basgrupp som består av teckenintervallet från "a" till "z". Om du vill definiera den uppsättning tecken som består av basgruppen förutom tecknet "m" använder du [a-z-[m]]. Om du vill definiera den uppsättning tecken som består av basgruppen, förutom uppsättningen med tecknen "d", "j" och "p", använder du [a-z-[djp]]. Om du vill definiera den uppsättning tecken som består av basgruppen förutom teckenintervallet från "m" till "p", använder du [a-z-[m-p]].

Överväg subtraktionsuttrycket kapslad teckenklass, [a-z-[d-w-[m-o]]]. Uttrycket utvärderas från det innersta teckenintervallet utåt. Först subtraheras teckenintervallet från "m" till "o" från teckenintervallet "d" till "w", vilket ger uppsättningen tecken från "d" till "l" och "p" till "w". Den uppsättningen subtraheras sedan från teckenintervallet från "a" till "z", vilket ger uppsättningen tecken [abcmnoxyz].

Du kan använda valfri teckenklass med subtraktion för teckenklass. Om du vill definiera den uppsättning tecken som består av alla Unicode-tecken från \u0000 till \uFFFF utom blankstegstecken (\s), tecknen i den allmänna kategorin för skiljetecken (\p{P}), tecknen i det IsGreek namngivna blocket (\p{IsGreek}) och Unicode NEXT LINE-kontrolltecknet (\x85) använder du [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]].

Välj teckenklasser för ett subtraktionsuttryck för teckenklass som ger användbara resultat. Undvik ett uttryck som ger en tom uppsättning tecken, som inte kan matcha något, eller ett uttryck som motsvarar den ursprungliga basgruppen. Den tomma uppsättningen är till exempel resultatet av uttrycket [\p{IsBasicLatin}-[\x00-\x7F]], som subtraherar alla tecken i teckenintervallet IsBasicLatin från den IsBasicLatin allmänna kategorin. På samma sätt är den ursprungliga basgruppen resultatet av uttrycket [a-z-[0-9]]. Det beror på att basgruppen, som är teckenintervallet för bokstäver från "a" till "z", inte innehåller några tecken i den exkluderade gruppen, vilket är teckenintervallet för decimalsiffror från "0" till "9".

I följande exempel definieras ett reguljärt uttryck, ^[0-9-[2468]]+$, som matchar noll och udda siffror i en indatasträng. Det reguljära uttrycket tolkas som det visas i följande tabell.

Element Description
^ Starta matchningen i början av indatasträngen.
[0-9-[2468]]+ Matcha en eller flera förekomster av alla tecken från 0 till 9 förutom 2, 4, 6 och 8. Med andra ord matchar du en eller flera förekomster av noll eller en udda siffra.
$ Avsluta matchningen i slutet av indatasträngen.
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
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

Se även