这个问题最近给我带来了打击。
所以我的任务是将人们的bios放在网上(在另一个问题中征求意见),我使用XML,并根据将要显示的部分创建元素。
有些人在他们的生物中有公式,当我复制/粘贴时,格式化没有复制。
我的问题是,是否有一种简单的方法来解析公式和格式? 我有一个想法是只下标数字,但我必须实现bbcode标签来做到这一点,因为到处都有数字。嗯,或者我可以检测一个数字是否在一个字母的右边并且下标这个数字。
一些论坛就像CoO 3
我使用PHP来解析XML。
你有什么看法?
答案 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