# get-regex.ps1 # # Displays .NET/C#/Powershell Regular Expression Quick Reference # # Author: Robbie Foust (rfoust@duke.edu) # # For best visual results, run "get-regex | ft -auto" function global:get-regex ([switch]$CharRep, [switch]$CharClass, [switch]$Anchors, [switch]$Comments, [switch]$Grouping, [switch]$Replacement) { $CharRepDesc = "Character representations" $CharClassDesc = "Character classes and class-like constructs" $AnchorsDesc = "Anchors and other zero-width tests" $CommentsDesc = "Comments and mode modifiers" $GroupingDesc = "Grouping, capturing, conditional, and control" $ReplacementDesc = "Replacement sequences" if (!$CharRep -and !$CharClass -and !$Anchors -and !$Comments -and !$Grouping -and !$Replacement) { $all = $true } else { $all = $false } if ($CharRep -or $all) { $CharRepObj = @() $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\a" -pass | add-member noteproperty "Meaning" "Alert (bell), x07." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\b" -pass | add-member noteproperty "Meaning" "Backspace, x08, supported only in character class." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\e" -pass | add-member noteproperty "Meaning" "ESC character, x1B." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\n" -pass | add-member noteproperty "Meaning" "Newline, x0A." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\r" -pass | add-member noteproperty "Meaning" "Carriage return, x0D." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\f" -pass | add-member noteproperty "Meaning" "Form feed, x0C." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\t" -pass | add-member noteproperty "Meaning" "Horizontal tab, x09." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\v" -pass | add-member noteproperty "Meaning" "Vertical tab, x0B." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\0octal" -pass | add-member noteproperty "Meaning" "Character specified by a two-digit octal code." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\xhex" -pass | add-member noteproperty "Meaning" "Character specified by a two-digit hexadecimal code." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\uhex" -pass | add-member noteproperty "Meaning" "Character specified by a four-digit hexadecimal code." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj += new-object psobject | add-member noteproperty "Sequence" "\cchar" -pass | add-member noteproperty "Meaning" "Named control character." -pass | add-member noteproperty "Table" $CharRepDesc -pass $CharRepObj } if ($CharClass -or $all) { $CharClassObj = @() $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "[...]" -pass | add-member noteproperty "Meaning" "A single character listed or contained within a listed range." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "[^...]" -pass | add-member noteproperty "Meaning" "A single character not listed and not contained within a listed range." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "." -pass | add-member noteproperty "Meaning" "Any character, except a line terminator (unless single-line mode, s)." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "\w" -pass | add-member noteproperty "Meaning" "Word character." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "\W" -pass | add-member noteproperty "Meaning" "Non-word character." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "\d" -pass | add-member noteproperty "Meaning" "Digit." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "\D" -pass | add-member noteproperty "Meaning" "Non-digit." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "\s" -pass | add-member noteproperty "Meaning" "Whitespace character." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "\S" -pass | add-member noteproperty "Meaning" "Non-whitespace character." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "\p{prop}" -pass | add-member noteproperty "Meaning" "Character contained by given Unicode block or property." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj += new-object psobject | add-member noteproperty "Sequence" "\P{prop}" -pass | add-member noteproperty "Meaning" "Character not contained by given Unicode block or property." -pass | add-member noteproperty "Table" $CharClassDesc -pass $CharClassObj } if ($Anchors -or $all) { $AnchorsObj = @() $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "^" -pass | add-member noteproperty "Meaning" "Start of string, or after any newline if in MULTILINE mode." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "\A" -pass | add-member noteproperty "Meaning" "Beginning of string, in all match modes." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "$" -pass | add-member noteproperty "Meaning" "End of string, or before any newline if in MULTILINE mode." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "\Z" -pass | add-member noteproperty "Meaning" "End of string but before any final line terminator, in all match modes." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "\z" -pass | add-member noteproperty "Meaning" "End of string, in all match modes." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "\b" -pass | add-member noteproperty "Meaning" "Boundary between a \w character and a \W character." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "\B" -pass | add-member noteproperty "Meaning" "Not-word-boundary." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "\G" -pass | add-member noteproperty "Meaning" "End of the previous match." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "(?=...)" -pass | add-member noteproperty "Meaning" "Positive lookahead." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "(?!...)" -pass | add-member noteproperty "Meaning" "Negative lookahead." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "(?<=...)" -pass | add-member noteproperty "Meaning" "Positive lookbehind." -pass | add-member noteproperty "Table" $AnchorsDesc -pass $AnchorsObj += new-object psobject | add-member noteproperty "Sequence" "(?...)" -pass | add-member noteproperty "Meaning" "Captures matched substring into group, 'name'." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "(?:...)" -pass | add-member noteproperty "Meaning" "Grouping-only parentheses, no capturing." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "(?>...)" -pass | add-member noteproperty "Meaning" "Disallow backtracking for subpattern." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "...|..." -pass | add-member noteproperty "Meaning" "Alternation; match one or the other." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "*" -pass | add-member noteproperty "Meaning" "Match 0 or more times." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "+" -pass | add-member noteproperty "Meaning" "Match 1 or more times." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "?" -pass | add-member noteproperty "Meaning" "Match 1 or 0 times." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "{n}" -pass | add-member noteproperty "Meaning" "Match exactly n times." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "{n,}" -pass | add-member noteproperty "Meaning" "Match at least n times." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "{x,y}" -pass | add-member noteproperty "Meaning" "Match at least x times, but no more than y times." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "*?" -pass | add-member noteproperty "Meaning" "Match 0 or more times, but as few times as possible." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "+?" -pass | add-member noteproperty "Meaning" "Match 1 or more times, but as few times as possible." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "??" -pass | add-member noteproperty "Meaning" "Match 0 or 1 times, but as few times as possible." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "{n,}?" -pass | add-member noteproperty "Meaning" "Match at least n times, but as few times as possible." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj += new-object psobject | add-member noteproperty "Sequence" "{x,y}?" -pass | add-member noteproperty "Meaning" "Match at least x times, no more than y times, but as few times as possible." -pass | add-member noteproperty "Table" $GroupingDesc -pass $GroupingObj } if ($Replacement -or $all) { $ReplacementObj = @() $ReplacementObj += new-object psobject | add-member noteproperty "Sequence" "`$1, `$2, ..." -pass | add-member noteproperty "Meaning" "Captured submatches." -pass | add-member noteproperty "Table" $ReplacementDesc -pass $ReplacementObj += new-object psobject | add-member noteproperty "Sequence" "`${name}" -pass | add-member noteproperty "Meaning" "Matched text of a named capture group." -pass | add-member noteproperty "Table" $ReplacementDesc -pass $ReplacementObj += new-object psobject | add-member noteproperty "Sequence" "`$'" -pass | add-member noteproperty "Meaning" "Text before match." -pass | add-member noteproperty "Table" $ReplacementDesc -pass $ReplacementObj += new-object psobject | add-member noteproperty "Sequence" "`$&" -pass | add-member noteproperty "Meaning" "Text of match." -pass | add-member noteproperty "Table" $ReplacementDesc -pass $ReplacementObj += new-object psobject | add-member noteproperty "Sequence" "`$'" -pass | add-member noteproperty "Meaning" "Text after match." -pass | add-member noteproperty "Table" $ReplacementDesc -pass $ReplacementObj += new-object psobject | add-member noteproperty "Sequence" "`$+" -pass | add-member noteproperty "Meaning" "Last parenthesized match." -pass | add-member noteproperty "Table" $ReplacementDesc -pass $ReplacementObj += new-object psobject | add-member noteproperty "Sequence" "`$_" -pass | add-member noteproperty "Meaning" "Copy of original input string." -pass | add-member noteproperty "Table" $ReplacementDesc -pass $ReplacementObj } }