i modifier: insensitive. Matches without distinguishing uppercase and lowercase letters
u modifier: unicode. Makes \w, \W, \b, \B, \d, \D, \s, and \S use Unicode semantics (redundant in Python 3)
g modifier: global. Finds all matches instead of stopping after the first