Private/Wissen/X_Technology/X02_RegularExpression.ps1

<#
 
# Regular Expression
 
Regular Expression (RegEx) zu deutsch Reguläre Ausdrücke.
 
- **Hashtags** RegEx Regular Expression
- **Version** 2020.8.31
 
#>


# 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
  ^ Start des Textes \A
  $ End des Textes \z
  (?:) Bildet eine Gruppe
  ... Und viele mehr....
#>


# ? EMail Adresse validieren
$string = 'info@attilakrick.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 -iMatch $regex) {
    $email = [System.Net.Mail.MailAddress]::new($Matches.EMail, 'Attila Krick') # $Matches[0]
    $email
}
# HINWEIS: $Matches enthält immer die Auswertung der letzten RegEx-Operation.

# TIPP - Zuerst im Internet nach Ausdrücken suchen z.B.: regex email

# TIPP - Für Eigenentwicklungen z.B. Testen und Entwickeln mit https://regex101.com/

# ? IPv4 Adresse validieren
$string = 'Meine IPv4-Adresse ist: 192.168.178.3 Stand: 31.8.2020'
$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 -cMatch $regex) {
    [IPAddress]$Matches.IPv4Address
}

# ? TAB in ; umwandeln (Replace-Operatoren unterstützt RegEx)
@"
Wert1 Wert2 Wert3
"@
 -Replace '[\t]', ';'

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

# ? ConvertFrom-String - Texte zu String-Daten konvertieren

'Lee Holmes', 'Steve Lee', 'Jeffrey Schmitt' | Convert-String -Example 'Bill Gates=Gates, B.', 'John Smith=Smith, J.'