RegEx/Unix/Conf_Line.regex.source.ps1

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

Write-RegEx -Modifier Multiline -Description "Matches Lines in a .conf or .ini file." -Comment 'Set Multiline mode' |
    Write-RegEx -Pattern @(
        Write-RegEx -StartAnchor LineStart  -LiteralCharacter ';#' |
            Write-RegEx -Until (Write-Regex -EndAnchor LineEnd) -Name Comment -Comment 'Lines that start with ; or # are comments'

        Write-RegEx -CharacterClass Whitespace -Repeat -StartAnchor LineStart -EndAnchor LineEnd -Comment 'Blank lines will also match, but not be captured'

        Write-RegEx -StartAnchor LineStart -CharacterClass Word, Whitespace -LiteralCharacter .- -Repeat -Name Key -Comment 'Otherwise, the first word is the name' |
            Write-RegEx -CharacterClass Whitespace -Optional |
            Write-RegEx -LiteralCharacter =: -Name Delimeter -Comment 'Followed by an equals or colon (surrounded by optional whitespace)'|
            Write-RegEx -CharacterClass Whitespace -Optional |
            Write-RegEx -Until (Write-Regex -EndAnchor LineEnd) -Name Value -Comment 'Anything until the end of line is the value'
    
        Write-RegEx -StartAnchor LineStart -EndAnchor LineEnd -CharacterClass Any -Name Line
    
    ) -Or -Description 'A Configuration line can either be a comment line, a blank line, or a line with a value' | 
    Set-Content -Path (Join-Path $myRoot $myName)