2012-11-18 38 views
2

我正在用php過濾一些文本。我看起來像模式:正則表達式跳過嵌入式模式

Mary [qtip:had|past tense of have] little lamb. 

我提取錨文本從刀尖「有」「過去時態的具有」]的處理

部分是使用正則表達式/\[qtip:([^\|\\]]+)\|?([^\\]]*)?\]/

這是工作正常

我想擴展功能。

Mary [qtip:had|past [otherFunction:tense|verb form signalling time] of have] little lamb. 

我頭腦簡單的模式發現"had" & "past [otherFunction:tense|verb form indicating time"

我想這將跳過嵌入[]雙的模式。這些不允許在錨或工具提示。

回答

0

爲什麼你逃脫|和雙逃避]?爲了解決您的問題,只需禁止在您的模式中打開[。這要求該模式在沒有遇到任何嵌套方括號的情況下達到閉幕]

preg_match_all('/\[qtip:([^|[\]]+)\|?([^[\]]*)\]/', $input, $matches); 

我也刪除了最後?因爲如果你在應該成爲可選模式使用使用*是多餘的。