使用PHP preg_match在html标记中下标数字

时间:2014-01-03 01:04:50

标签: php regex

为了编写正确的分子式,我试图在字母之间的字母或数字之后下标数字,而不是仅在字母(系数)之前的数字。例如,在4H2O中,只应下标“2”。到目前为止,我已经达成了以下解决方案:

$oldFormula = "4H2O"
$newFormula = preg_replace('/([A-Z)])([0-9]+)/', '\1<sub>\2</sub>', $chemical_MF);

这适用于上面的例子,其中所有原子符号都是单个字母。然而,在“C6H8Cl2O2”中,除Cl(氯)之后的“2”外,所有数字都是正确下标的。我是正则表达式的新手,需要这种模式的帮助。

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