# enter some regular expressions!

**α** :=
**β** :=

** ~α** = ϕ
** ~β** = ϕ
**α < β** = false
**α = β** = true
**α > β** = false
**α & β** = .*
**α ^ β** = ϕ
**α - β** = ϕ

**s** :=
**s ∈ α** = true
**s ∈ β** = true

**|α|** = 0
**|β|** = 0

**dfa(α)** has 0 states
**dfa(β)** has 0 states

**regex syntax**
**.** match any single character
**xy** concatenation: match **x** and then **y**
**x|y** alternation: match **x** or **y**
**x*** kleene star: match **x** zero-or-more times
**(xyz)** grouping: treat **xyz** as a single item (e.g. **(xyz)***)
**()** an empty regex matches the empty string
**x+** kleene plus: match **x** one-or-more times (equivalent to **xx***)
**x?** optional: optionally match **x** (equivalent to **(x|)**)
**x{n}** exponentiation: concatenate **x** to itself **n** times
**x{m,n}** repetition: concatenate **x** to itself between **m** and **n** times
**[a-z0-9]** grouping: match any single character in the group
**[^a-z0-9]** negative grouping: match any single character **not** in the group
**\c** escaping: match the special character **c**
**\u001a** unicode escaping: match the corresponding UTF-16 character
a, b, c all other characters match themselves
**unsupported features**
- anchors (e.g. **^**, **$**), *although ***^** and **$** must still be escaped!
- zero-width assertions (e.g. **(?=...)**, **(?<=...)**)
- back references (e.g. **\1**, **\2**)
- subgroup extraction
- searching or partial matching
- other flags that change behavior (e.g. case-insensitivity)
see https://github.com/non/antimirov for more information
by eiríkr åsheim (@d6 on twitter and mastodon)