Skip to content

Instantly share code, notes, and snippets.

@jhyland87
Created September 12, 2016 17:09
Show Gist options
  • Save jhyland87/af509a98081eb4197caa290c7f15ae01 to your computer and use it in GitHub Desktop.
Save jhyland87/af509a98081eb4197caa290c7f15ae01 to your computer and use it in GitHub Desktop.
SQL Macro stuff
\{
(?:(?# Macro settings start)
\;?
(?# Noun ptrn start)(?P<noun>(?:cols|col|range))\:
(?# Column idx start)(?:
(?P<colgroup>
(?<=cols:)(?# Colgroup 'cols' EG: A,C,E,G)(?P<cols>(?:(?:[a-zA-Z]+|[0-9]+)(?:,(?:[a-zA-Z]+|[0-9]+))+))
|
(?<=range:)(?# Colgroup 'range' EG: A-Z)(?P<col_start>(?:[a-zA-Z]+|[0-9]+))\-(?P<col_stop>(?:[a-zA-Z]+|[0-9]+|\*))
)?
|
(?<=col:)(?# Single col EG: A)(?P<col>(?:[a-zA-Z]+|[0-9]+))
)
\;?
|
\;?
(?# Default Value)(?:d\:(?P<default>(?:[a-zA-Z0-9-_\s]+)))
\;?
|
\;?
(?# Optional 'colgroup' joiner)(?(colgroup)(?:j\:(?P<joiner>(?:.)))?)\;?
(?# Macro settings stop))+
\}(?# Optional modifier)(?P<modifier>(?:[\?\!]))?
\{(?:(?# Macro settings start)\;?(?# Noun ptrn start)(?P<noun>(?:cols|col|range))\:(?# Column idx start)(?:(?P<colgroup>(?<=cols:)(?# Colgroup 'cols' EG: A,C,E,G)(?P<cols>(?:(?:[a-zA-Z]+|[0-9]+)(?:,(?:[a-zA-Z]+|[0-9]+))+))|(?<=range:)(?# Colgroup 'range' EG: A-Z)(?P<col_start>(?:[a-zA-Z]+|[0-9]+))\-(?P<col_stop>(?:[a-zA-Z]+|[0-9]+|\*)))?|(?<=col:)(?# Single col EG: A)(?P<col>(?:[a-zA-Z]+|[0-9]+)))\;?|\;?(?# Default Value)(?:d\:(?P<default>(?:[a-zA-Z0-9-_\s]+)))\;?|\;?(?# Optional 'colgroup' joiner)(?(colgroup)(?:j\:(?P<joiner>(?:.)))?)\;?(?# Macro settings stop))+\}(?# Optional modifier)(?P<modifier>(?:[\?\!]))?
Regex101.com Example: https://regex101.com/r/mV4tQ4/4
# Example Macros
{col:A}! # Column: A; Required; Optional
{cols:c,e,g,i;d:test} # Columns: C,E,G,I; Default: test
{range:C-Z;d:test} # Col Range: C-Z; Default: test
{d:test;cols:a,z,q,p;j:,} # Columns: A,Z,Q,P, Joiner: ,
{cols:U,V;j:|} # Columns: U, V; Joiner: |; Optional
{range:b-f} # Col Range: B-F; Optional
{cols:z,p,1,3} # Columns: Z, P, #1 (A), #3 (C); Optional
{range:2-Y}! # Col Range: #2 (B)-Y; Required
{col:1} # Column: #1 (A); Optional
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment