Possible Duplicate:
Regex for checking if a string has mismatched parentheses?

I'm trying to write a regex to match a string of numbers only, optionally enclosed in parentheses (regex must also check if parentheses are closed correctly, that is, if they exist in pars). So all of this should be considered valid by the regex: 1234567 123(45)6 (123)(456)

I came up with this using conditional patterns (note that I use spaces so the x modifier is required to make it ignore spaces):

$val = "(123)";
$regex = "^( (\()? [0-9]+ (?(2)\)) )+$";
$ret = preg_match("/{$regex}/x", $val, $matches);

However although it matches the above "(123)" correctly, it also matches the below which it shouldnt: "(123)45)" (second number has closing parentheses only)

Anyone can help?

NOTE: No nested parentheses allowed

Accepted Answer

Assuming that parentheses can't be nested, you can do this by treating digits enclosed with parentheses as if they were a single digit:

([0-9]|\([0-9]+\))*
Written by John Kugelman
This page was build to provide you fast access to the question and the direct accepted answer.
The content is written by members of the stackoverflow.com community.
It is licensed under cc-wiki