OK regex question , how to extract a character NOT between two characters, in this case brackets.
I have a string such as: word1 | {word2 | word3 } | word 4
Depends on the language/implementation you're using, but...
\|(?![^{]*})
This matches a pipe that is not followed by a } except in the case that a { comes first.
The (?! ... ) is known as a negative lookahead assertion. This is easier to understand if we start with a positive lookahead assertion:
\|(?=[^{]*})
The above only matches a pipe that is followed by a } without encountering a { first. When you negate that by replacing the = with a !, the match is now only successful if there's no way for the positive case to be true (also known as the complement).