2014-02-11 39 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