First, understand that parenthesis are not necessary in postfix notation when the arity of an operator is known. To see why:
3 3 6 * *
Starting from the left, stack operands until you encounter an operator:
operands <- 3 <- 3 <- 6
operator: *
We know that *
is a binary operator, so pop two operands off the stack, apply the operator, and push the result back on:
operands -> 3 -> 6
operands <- 18
Continue to accumulate operands until you encounter another operator:
operator: *
operands -> 3 -> 18
operands <- 54
When the expression is consumed (assuming it's well-formed) the stack will contain one value: the result.
But your question is about parenthesis: assuming that your desire is to be able to parse arbitrarily nested parentheses, regular expressions will not help you, for reasons explained here. You need something that can recognize a context free grammar, i.e. a pushdown automaton.
But you're looking, I take it, for something more than abstract computer science-speak; here's a related question that has some useful information on the Shunting Yard Algorithm, which converts parenthesized infix expressions into postfix expressions.
Edit: Ok, I should have said "true regular expressions alone will not help you." You could use regular expressions (matching innermost pairs of parenthesis) and substitution to (in effect) treat a parenthesized expression as its own implicit parse tree. But the Shunting Yard Algorithm is cooler :)