I had a recent regex issue like this, and in my research I read some amazing advice that may be helpful in this case as well. It essentially boiled down to "it may be easier to make a regex expression for the characters you want to allow".
In my case, people were adding special characters to a field used for generating a file name (which is kind of an issue). At first, I wanted to exclude special characters... but that proved to be annoying. In the end, I settled for allowing only certain characters. E.g.,
regex(.,'^[a-zA-Z0-9\. _-]*$')