如何使用PHP将特定单词后跟数字转换为字符串中的下标?

时间:2016-02-14 20:51:26

标签: php regex

如何使用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;

2 个答案:

答案 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标签替换。