我正在使用正则表达式模式来查找[code] [/ code] BB标签的实例。 (这是在PHP中使用preg_match / preg_relace / etc的珍珠型正则表达式)
'~\[code\](.*?)\[\/code\]~is'
好吧,我的问题是我怎么能这样做,所以有人可以输入类似的内容:
[code][code]code here[/code][/code]
输入此内容的目的是向新手演示如何将代码放入[code] [/ code]标签。
目前,如果我键入它,正则表达式将停止在“[/ code]”的第一个实例,而不是继续向前看,以查看“[code]”的第二个实例
由于我是新用户,我无法发布图片,但这里是输出的屏幕截图: http://i.imgur.com/t8zNh.png
我知道正则表达式中有一个术语称为“积极向前看”和“消极向前看”,但我不太确定它们的含义,或者它们是否与我的情况相关。有人可以帮我一把吗?谢谢。
编辑:我很抱歉,但我似乎没有足够的代表来+1。我非常感谢你的帮助,而且速度非常快。
答案 0 :(得分:2)
你可以尝试这种模式
'~\[code\](.*?)(\[\/code\])+~is'
答案 1 :(得分:1)
如果您还要涵盖两个结束标记之间可以有更多代码的情况,您可以试试这个
\[code\].*?\[\/code\](?:(?:(?!\[code\]).)*\[\/code\])?
第一部分\[code\].*?\[\/code\]
从第一个开始标记到第一个结束标记匹配。
然后是棘手的部分,现在是可选的。如果后面没有开始标记,则(?:(?:(?!\[code\]).)*\[\/code\])?
匹配字符,直到找到最后一个结束标记。
答案 2 :(得分:0)
您正在查看的是删除?
(.*?)
使用?
时,它是一个懒人匹配,并且会尽可能匹配少数字符,这就是它在看到第一个[/code]
没有?
,它是一个贪婪的匹配,将匹配尽可能多的字符,并匹配到外部结束标记。