Do a while loop on $formula =~ s/\(([A-Za-z0-9]*)\)/Q$i/. This will only get any inner compositions (no addition parens). You'll replace these with Q1, Q2, etc. (or if you're worried about more, you can use Qa, Qb, or QA, QB, etc. since I suspect you're considering chemical symbols with no more than 2 letters). $1 will capture the inner composition, which you should work out and associate in a hash with the Q variable. Note that you remove those inner parans when you do this.
The next time around, if there are still more parans, you'll capture those; Now you can consider the Q series and do any necessarily multiplication from those as well.
Once you exit this while loop, you'll have no more parans, so you can calculate the final composition with no problems.
-----------------------------------------------------
Dr. Michael K. Neylon - mneylon-pm@masemware.com
||
"You've left the lens cap of your mind on again, Pinky" - The Brain
"I can see my house from here!"
It's not what you know, but knowing how to find it if you don't know that's important
In reply to Re: Regexps for Parsing Brackets in Chemical Formulae
by Masem
in thread Regexps for Parsing Brackets in Chemical Formulae
by Elgon
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |