开发者

Parsing periodic elements in PHP/html

This problem actually hit me recently.

So I was tasked with putting people's bios up on the web (asked for opinions in a different question), which I went with XML and just created elements based on what sections was going to be displayed.

Some people had formulas in their bio and when I was copying/pasting the formatting didn't copy over.

My question is that is there an easy way to parse out the formulas and format accordingly?

One idea I had was to just subscript the numbers, but I would have to implement bbcode tags to do this as there are numbers all over the place. Hmm, or I could detect if a number is to the right of a letter and subscript the n开发者_Python百科umber.

Some of the forumlas are like CoO3

I used PHP to parse the XML.

What are your opinions?


Maybe something like this?

<?php
function formatFormulas($html)
{
    $regex  = '/(\\s*(Ac|Ag|Al|Am|Ar|As|At|Au|Ba|Be|Bh|Bi|Bk|Br|B|Ca|Cd|Ce|Cf|Cl|Cm|Co|Cr|Cs|Cu|C|';
    $regex .= 'Db|Ds|Dy|Er|Es|Eu|Fe|Fm|Fr|F|Ga|Gd|Ge|He|Hf|Hg|Ho|Hs|H|In|Ir|I|Kr|K|La|Li|Lr|Lu|Md|';
    $regex .= 'Mg|Mn|Mo|Mt|Na|Nb|Nd|Ne|Ni|No|Np|N|Os|O|Pa|Pb|Pd|Pm|Po|Pr|Pt|Pu|P|Ra|Rb|Re|Rf|Rg|Rh|';
    $regex .= 'Rn|Ru|Sb|Sc|Se|Sg|Si|Sm|Sn|Sr|S|Ta|Tb|Tc|Te|Th|Ti|Tl|Tm|Uub|Uuh|Uuo|Uup|Uuq|Uus|Uut|';
    $regex .= 'U|V|W|Xe|Yb|Y|Zn|Zr)\\s*(<[^>]+>)*\\s*\\d*\\s*(<[^>]+>)*\\s*)+/';
    if ( preg_match_all($regex, $html, $m) ) {

        for ($i = 0; $i < count($m[0]); $i++) {

            $replace = preg_replace('/\\s+/', "", $m[0][$i]);
            $replace = preg_replace('/<[^>]+>/', "", $replace);
            $replace = preg_replace('/\\d+/', '<sub>$0</sub>', $replace);
            $leading = preg_replace('/^(\\s*)[\\S\\s]*/', '$1', $m[0][$i]);
            $trailing = preg_replace('/^[\\S\\s]*?(\\s*)$/', '$1', $m[0][$i]);
            $replace = $leading . $replace . $trailing;
            $html = str_replace($m[0][$i], $replace, $html);

        }

    }

    return $html;
}
?>


I would lean toward using REGEX to parse your chem notation

Maybe this helps? http://www.pmichaud.com/pipermail/pmwiki-users/2008-October/052692.html

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜