A partial suggestion:

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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.