It seems impossible?
On the left a horizontal must start with F: F.[AO].[AO].*
However, the diagonal for that cell may not include an F (aside from the start): [^X]*(DN|TE|NI)
[^X] means any character other than X, so [^X]* matches zero or more of any characters, so long as none of them are X.
[^X]* means anything but X as many times as you want. So F will match this part.
BIG EDIT:
Because it's so trivially unsolvable, I had a quick look at the posted solution.
We're reading it wrong.
Take the first regex on the top row, one you included in your example:
[^X]*(DN|TE|NI)
You're supposed to fill that in from the bottom to the top.
In other words, the first letter goes immediately to the right of [^c]*[^R]*III.* - that square has to be a 'not X'. The hex immediately below it has to be an E, I, or N.