为了编写正确的分子式,我试图在字母之间的字母或数字之后下标数字,而不是仅在字母(系数)之前的数字。例如,在4H2O中,只应下标“2”。到目前为止,我已经达成了以下解决方案:
$oldFormula = "4H2O"
$newFormula = preg_replace('/([A-Z)])([0-9]+)/', '\1<sub>\2</sub>', $chemical_MF);
这适用于上面的例子,其中所有原子符号都是单个字母。然而,在“C6H8Cl2O2”中,除Cl(氯)之后的“2”外,所有数字都是正确下标的。我是正则表达式的新手,需要这种模式的帮助。
答案 0 :(得分:0)
尝试以下方法:
$newFormula = preg_replace('/([A-Z][a-zA-Z]*)([0-9]+)/', '\1<sub>\2</sub>', $chemical_MF);
答案 1 :(得分:0)
尝试:
$oldFormula = "C6H8Cl2O2";
$newFormula = preg_replace('/([A-Z][a-z]?)([0-9]+)/', '\1<sub>\2</sub>', $oldFormula);
var_dump($newFormula);
如果第二个字符总是小写,则此方法有效。您只需将其替换为:
/([A-Za-z]+)([0-9]+)/
这也符合aA0
。
我改变了两件事:
1
/([A-Z)])([0-9]+)/
// ^-- this character should not be here, you're matching A-Z and )
2我添加了[a-z]?
,这意味着:可选择a-z
。