如何使用PHP将字符串中的特定单词后跟数字转换为下标?
例如,
$nutrients = "Vitamin A, Vitamin B1, Vitamin B12, 1-Octamine, 1,2,Hydroxyethyl";
字符串应转换为:
Vitamin A, Vitamin B<sub>1</sub>, Vitamin B<sub>12</sub>, 1-Octamine, 1,2,Hydroxyethyl
(维生素A,维生素B 1 ,维生素B 12 ,1-辛胺,1,2,羟乙基)
模式必须匹配为维生素B &lt;任何数字&gt;
答案 0 :(得分:2)
这应该在Vitamin A-Z
之后的任何数字下标。
$nutrients = preg_replace('~(Vitamin [A-Z])(\d+)~', '$1<sub>$2</sub>', $nutrients);
可能不需要角色类,维生素B是唯一可以下标的吗?
Regex101演示:https://regex101.com/r/rR4nN5/1
PHP演示:https://eval.in/518553
+
量词需要前面的字符存在,*
不存在。
e.g。
Test\d*
匹配两者:
Test
和
Test123
答案 1 :(得分:0)
(?<=[A-Z])\d+
<sub>\0<sub>
$re = "/(?<=[A-Z])\\d+/";
$str = "Vitamin A, Vitamin B1, Vitamin B12, 1-Octamine, 1,2,Hydroxyethyl";
$subst = "<sub>$0<sub>";
$result = preg_replace($re, $subst, $str);
Pure Regex:https://regex101.com/r/sG0fE7/1
PHP:https://eval.in/518559
匹配一个大写字母(使用正面的lookbehind,因此它不会捕获它)然后匹配任何数字。然后用数字周围的sub
标签替换。