2014-02-11 37 views
2

之间的数字。这是我的正则表达式:正则表达式替换 - 节点

\^((<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

什么是正确的方式来编写替换变量?

+0

写作又使用正则表达式另一个XML分析器? – devnull

+0

这将超出我的技能 –

回答

1

您可以使用此环视基于正则表达式:

$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和再处理它。

+0

我需要保留替换整个作为\ 1 –

+0

因此输出应该只是'1'? – anubhava

+0

与两个不同的替换变量一起使用时,相同的$ re应在第一种情况下捕获并在第二种情况下捕获14个。 –

1

直接回答你的问题:为了从反向引用$21歧义反向引用$2和数量1,你可以使用大括号:

${2}1