Sdílet prostřednictvím


Příklad regulárního výrazu: Změna formátů kalendářních dat

Následující příklad kódu používá metodu Regex.Replace k nahrazení kalendářních dat, které mají formulář mm/dd/yy s kalendářními daty, které mají formulář dd-mm-yy.

Upozorňující

Při zpracování System.Text.RegularExpressions nedůvěryhodného vstupu předejte vypršení časového limitu. Uživatel se zlými úmysly může poskytnout vstup RegularExpressions, což způsobí útok na dostupnost služby. ASP.NET rozhraní API architektury Core, která používají RegularExpressions vypršení časového limitu.

Příklad

static string MDYToDMY(string input)
{
   try {
      return Regex.Replace(input,
             @"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b",
            "${day}-${month}-${year}", RegexOptions.None,
            TimeSpan.FromMilliseconds(150));
   }
   catch (RegexMatchTimeoutException) {
      return input;
   }
}
Function MDYToDMY(input As String) As String
    Try
        Return Regex.Replace(input, _
               "\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _
               "${day}-${month}-${year}", RegexOptions.None,
               TimeSpan.FromMilliseconds(150))
    Catch e As RegexMatchTimeoutException
        Return input
    End Try
End Function

Následující kód ukazuje, jak lze metodu MDYToDMY volat v aplikaci.

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      string dateString = DateTime.Today.ToString("d",
                                        DateTimeFormatInfo.InvariantInfo);
      string resultString = MDYToDMY(dateString);
      Console.WriteLine("Converted {0} to {1}.", dateString, resultString);
   }

   static string MDYToDMY(string input)
   {
      try {
         return Regex.Replace(input,
                @"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b",
               "${day}-${month}-${year}", RegexOptions.None,
               TimeSpan.FromMilliseconds(150));
      }
      catch (RegexMatchTimeoutException) {
         return input;
      }
   }
}
// The example displays the following output to the console if run on 8/21/2007:
//      Converted 08/21/2007 to 21-08-2007.
Imports System.Globalization
Imports System.Text.RegularExpressions

Module DateFormatReplacement
    Public Sub Main()
        Dim dateString As String = Date.Today.ToString("d", _
                                             DateTimeFormatInfo.InvariantInfo)
        Dim resultString As String = MDYToDMY(dateString)
        Console.WriteLine("Converted {0} to {1}.", dateString, resultString)
    End Sub

    Function MDYToDMY(input As String) As String
        Try
            Return Regex.Replace(input, _
                   "\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _
                   "${day}-${month}-${year}", RegexOptions.None,
                   TimeSpan.FromMilliseconds(150))
        Catch e As RegexMatchTimeoutException
            Return input
        End Try
    End Function
End Module
' The example displays the following output to the console if run on 8/21/2007:
'      Converted 08/21/2007 to 21-08-2007.

Komentáře

Vzor \b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b regulárního výrazu je interpretován, jak je znázorněno v následující tabulce.

Vzor Popis
\b Začne porovnání na hranici slova.
(?<month>\d{1,2}) Porovná jednu nebo dvě desítkové číslice. Toto je month zachycená skupina.
/ Porovná značku lomítka.
(?<day>\d{1,2}) Porovná jednu nebo dvě desítkové číslice. Toto je day zachycená skupina.
/ Porovná značku lomítka.
(?<year>\d{2,4}) Porovná se ze dvou až čtyř desetinných číslic. Toto je year zachycená skupina.
\b Ukončí porovnání na hranici slova.

${day}-${month}-${year} Vzor definuje náhradní řetězec, jak je znázorněno v následující tabulce.

Vzor Popis
$(day) Přidejte řetězec zachycený day skupinou zachycení.
- Přidání spojovníku
$(month) Přidejte řetězec zachycený month skupinou zachycení.
- Přidání spojovníku
$(year) Přidejte řetězec zachycený year skupinou zachycení.

Viz také