No, if you are strictly speaking about regular expressions and not including some regular expression implementations that are actually context free grammars.
There is one limitation of regular expressions which makes it impossible to write a regex that matches all and only regexes. You cannot match implementations such as braces which are paired. Regexes use many such constructs, let's take []
as an example. Whenever there is an [
there must be a matching ]
, which is simple enough for a regex "\[.*\]"
.
What makes it impossible for regexes is that they can be nested. How can you write a regex that matches nested brackets? The answer is you can't without an infinitely long regex. You can match any number of nested parenthesis through brute force but you can't ever match an arbitrarily long set of nested brackets.
This capability is often referred to as counting, because you're counting the depth of the nesting. A regex by definition does not have the capability to count.
I ended up writing "Regular Expression Limitations" about this.