2012-11-18 108 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); 

我也删除了最后?因为如果你在应该成为可选模式使用使用*是多余的。