解析PHP / html中的周期性元素

时间:2009-12-10 15:10:51

标签: php html

这个问题最近给我带来了打击。

所以我的任务是将人们的bios放在网上(在另一个问题中征求意见),我使用XML,并根据将要显示的部分创建元素。

有些人在他们的生物中有公式,当我复制/粘贴时,格式化没有复制。

我的问题是,是否有一种简单的方法来解析公式和格式? 我有一个想法是只下标数字,但我必须实现bbcode标签来做到这一点,因为到处都有数字。嗯,或者我可以检测一个数字是否在一个字母的右边并且下标这个数字。

一些论坛就像CoO 3

我使用PHP来解析XML。

你有什么看法?

2 个答案:

答案 0 :(得分:2)

也许是这样的?

<?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;
}
?>

答案 1 :(得分:0)

我倾向于使用REGEX来解析化学符号

也许这会有帮助吗? http://www.pmichaud.com/pipermail/pmwiki-users/2008-October/052692.html