Reputation: 7390
Why does the following regular expression leads to an 'unbalanced parenthesis error'?
[x(?:[0-9])]
I know this one doesn't make sense. I am working on a larger expression and found this as a minimal working example that produces the error. I want to realize a choice with a nested inner choice.
Upvotes: 0
Views: 155
Reputation: 1211
Your problem is that you are trying to do the whole thing inside a character class created by the square brackets [...]
. What the Regex sees is
[x(?:[0-9]
As one character class you're trying to match, followed by
)]
Which makes no sense, since the right-parenthesis is meaningless without a left.
What you might be trying to do is match a character class followed by an uncaptured digit:
[x](?:[0-9])
If you're trying to force this inside the square brackets, then I'm guessing that you want to match several different scenarios, such as:
[xyz](?:[0-4])|[abc](?:[5-9])
Upvotes: 1
Reputation: 149050
[…]
creates a character class, which matches a single character in the set of characters that you specify within the braces. Character classes cannot contain groups, quantifiers, assertions, etc. Everything inside the character class is interpreted as a literal character, character range, or a predefined character set (like \s
but not .
)
So your pattern recognizes this as a character class [x(?:[0-9]
(which matches a single x
, (
, ?
, :
, [
, or any character from 0
to 9
), followed by )]
. But the )
is not escaped and is not matched with a corresponding (
, and so it produces an error.
It's likely you just want:
x[0-9]
This will match an x
followed by a single digit from 0
to 9
.
Upvotes: 3