Wissen/X16_RegularExpression.ps1

# ? TITEL Regular Expression
# ? DESCRIPTION Reguläre Ausdrücke
# ? TAGS RegEx Regular Expression
# ? VERSION 2019.11.08

# TODO Weiterführende und Nachschlage-Informationen
Get-Help -Name about_regular_expressions -ShowWindow
Get-Help -Name about_Comparison_Operators -ShowWindow
Get-Help -Name about_Operators -ShowWindow
Start-Process -FilePath 'https://docs.microsoft.com/de-de/dotnet/standard/base-types/regular-expression-language-quick-reference' # Sprachelemente für reguläre Ausdrücke – Kurzübersicht

<# ? Kurzübersicht der gängigsten Kürzel
 
Handout: https://download.microsoft.com/download/D/2/4/D240EBF6-A9BA-4E4F-A63F-AEB6DA0B921C/Regular%20expressions%20quick%20reference.pdf
 
! PLATZHALTER BESCHREIBUNG
  . Alle Zeichen, ausgenommen dem Zeilenumbruch
  [^abc] Alle Zeichen, ausgenommen abc
  [^a-z] Alle Zeichen, ausgenommen a bis z
  [abc] Die Zeichen abc
  [a-z] Alle Zeichen von a-z
  \d Jede Ziffer von 0 bis 9
  \D Jedes Zeichen ausgenommen Ziffern von 0-9
  \f Zeilenvorschub (Form Feed, ASCII 12)
  \n Zeilenumbruch (Line break)
  \r Wagenrücklauf (Carriage return)
  \s Jeglicher Leerraum (whitespace => space, tab, new line)
  \S Jeglicher NICHT Leerraum
  \t Tabulator
  ... Und viele mehr....
 
! QUANTIFIZIERER BESCHREIBUNG
  * Mindestvorkommen = 0 , Maximalvorkommen = unendlich
  + Mindestvorkommen = 1 , Maximalvorkommen = unendlich
  ? Mindestvorkommen = 0 , Maximalvorkommen = 1
  {n,} Mindestvorkommen = n , Maximalvorkommen = unendlich
  {n,m} Mindestvorkommen = n , Maximalvorkommen = m
  {n} Mindestvorkommen = n , Maximalvorkommen = n
  ... Und viele mehr....
 
! SONSTIGES BESCHREIBUNG
  $ End des Textes
  ^ Start des Textes
  ... Und viele mehr....
#>


# ? EMail Adresse validieren
$string = 'a.krick@outlook.com'
$regex="\A(?<EMail>[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\z"
If ($string -Match $regex) {
    [System.Net.Mail.MailAddress]$Matches.EMail
}

# ? IP Adresse validieren
$string = '192.168.178.3'
$regex='(?<IPv4Address>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))'
If ($string -Match $regex) {
    [IPAddress]$Matches.IPv4Address
}

# ? TAB in ; umwandeln
@"
Wert1 Wert2 Wert3
"@
 -replace '[\t]', ';'

# ? Teil-String über Gruppennamen finden
$text = 'The problem was discussed in KB552356. Mail feedback to admin@powershell.org'
$text -match '(?<kb>KB\d{4,6}).* (?<email>[a-z@\.]{7,50})' | Out-Null
$Matches.kb
$Matches.email