RegEx/EmailAddress.regex.source.ps1

$myName = ($MyInvocation.MyCommand.ScriptBlock.File | Split-Path -Leaf) -replace '\.source', '' -replace '\.ps1', '.txt'
$myRoot = $MyInvocation.MyCommand.ScriptBlock.File | Split-Path

Write-RegEx -Description "Matches an Email Address" |
    Write-RegEx -Name UserName -Pattern (
        Write-RegEx -CharacterClass Word -Comment "Match the username, which starts with a word character" |
            Write-RegEx -CharacterClass Word -LiteralCharacter '-.' -Min 0 -Comment "and can contain any number of word characters, dashes, or dots"
    ) |
    Write-RegEx -LiteralCharacter '@' -Comment "Followed by an @"|
    Write-RegEx -Name Domain -Pattern (
        Write-RegEx -CharacterClass Word  -Comment "The domain starts with a word character" |
            Write-RegEx -CharacterClass Word -LiteralCharacter '-' -Min 0 -Comment "and can contain any words with dashes," |
            Write-RegEx -NoCapture -Pattern (
                Write-RegEx -LiteralCharacter '.' -Comment "followed by at least one suffix (which starts with a dot),"|
                    Write-RegEx -CharacterClass Word -Comment "followed by a word character," |
                    Write-RegEx -CharacterClass Word -LiteralCharacter '-' -Min 0 -Comment "followed by any word characters or dashes"
            ) -Min 1
    ) |
    Set-Content -Path (Join-Path $myRoot $myName) -Encoding UTF8