Esempio di espressione regolare: modifica dei formati di data

Nell'esempio di codice seguente viene utilizzato il metodo Regex.Replace per sostituire le date con formato mm/gg/yy con date con il formato -mm-yy.

Avvertimento

L'uso senza restrizioni di System.Text.RegularExpressions con input non attendibile può esporre le applicazioni a attacchi di negazione del servizio. Per indicazioni su come usare in modo sicuro .NET espressioni regolari con input non attendibile, vedere Procedure consigliate per le espressioni regolari in .NET.

Esempio

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

Il codice seguente illustra come chiamare il metodo MDYToDMY in un'applicazione.

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 {dateString} to {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.

Commenti

Il pattern di espressione regolare \b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b viene interpretato come illustrato nella tabella seguente.

Modello Descrizione
\b Inizia la corrispondenza al limite di una parola.
(?<month>\d{1,2}) Corrispondi una o due cifre decimali. Questo è il gruppo catturato month.
/ Trova la corrispondenza con il segno di barra.
(?<day>\d{1,2}) Corrispondi una o due cifre decimali. Questo è il gruppo catturato day.
/ Trova la corrispondenza con il segno di barra.
(?<year>\d{2,4}) Trova la corrispondenza da due a quattro cifre decimali. Questo è il gruppo catturato year.
\b Termina la partita al confine di una parola.

Il criterio ${day}-${month}-${year} definisce la stringa di sostituzione, come illustrato nella tabella seguente.

Modello Descrizione
$(day) Aggiungere la stringa acquisita dal gruppo di acquisizione day.
- Aggiungere un trattino.
$(month) Aggiungere la stringa acquisita dal gruppo di acquisizione month.
- Aggiungere un trattino.
$(year) Aggiungere la stringa acquisita dal gruppo di acquisizione year.

Vedere anche