Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析PHP/html中的周期元素_Php_Html - Fatal编程技术网

解析PHP/html中的周期元素

解析PHP/html中的周期元素,php,html,Php,Html,这个问题最近确实困扰着我 因此,我的任务是将人们的bios放到web上(在另一个问题中征求意见),我使用XML并根据要显示的部分创建元素 有些人的简历中有公式,当我复制/粘贴时,格式没有复制过来 我的问题是,有没有一种简单的方法可以解析出相应的公式和格式? 我的一个想法是只在数字下标,但我必须实现bbcode标记才能做到这一点,因为到处都是数字。嗯,或者我可以检测一个数字是否在一个字母的右边,并在这个数字下标 有些穹窿像CoO3 我使用PHP解析XML 你的观点是什么?我倾向于使用正则表达式来解

这个问题最近确实困扰着我

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

有些人的简历中有公式,当我复制/粘贴时,格式没有复制过来

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

有些穹窿像CoO3

我使用PHP解析XML


你的观点是什么?

我倾向于使用正则表达式来解析你的化学符号


也许这有帮助

也许是这样的

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


谢谢!今天我将对其进行测试,并将其标记为有效答案:)。它所做的是从元素周期表中查找任何元素(目前区分大小写;如果需要,这很容易更改),然后是可选空格、可选HTML标记、可选空格、可选数字、可选空格、可选HTML标记,可选空白——然后是任何重复的空白(即一系列空白)。然后去掉内部的空白,把数字放在标签里。忘了提一下——它也去掉了HTML标签。另外,如果您想用某种特殊的标记来包装整个内容,您可以使用CSS格式化,您可以将第18行更改为:
$replace=$leading'$替换。“”$拖尾我今天将它插入到我们的框架中,据我所知,效果非常好。无论你在哪里工作,你都应该得到加薪:)。像这样的系统在我的脑子里蹦蹦跳跳,但我不是正则表达式专家,所以我不可能想出像这样优雅的东西。