这是我的正则表达式:
\^((<i><b>|<b><i>)(\d+)(\<\/b>\<\/i>|\<\/i>\<\/b>))?\s+/mi
它应该捕获 <i><b>14</b></i> some text
好消息是它捕获了 <i><b>14</b></i>
如\1
这是我该函数的第 1 步所需要的。
坏消息是我不知道如何编写替换变量来捕获 14
并将其替换为数字 1
我尝试的是\21\4
,其中\2
代表<i><b>
和\4
代表</b></i>
但整个事情被解释为 \21
不是\2
。 \2
之后没有空格
编写替换变量的正确方法是什么?
最佳答案
您可以使用这个基于环视的正则表达式:
$re = '~(?:<[bi]>)*\b(\d+)\b(?:</[bi]>)*~m';
$str = preg_replace($re, '$0 :: $1', '<i><b>14</b></i>');
//=> <i><b>14</b></i> :: 14
尽管使用 DOM 解析器解析 HTML 然后对其进行操作会更安全。
关于php - 正则表达式替换 - 节点之间的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21695327/