我使用正则表达式模式来查找[code][/code]BB标记的实例。(这是在PHP中使用preg_match/preg_relace/etc的珍珠型正则表达式)
'~'[code'](.*?)'['/code']~is'
好吧,我的问题是,我如何才能让别人打出这样的东西:
[code][code]code here[/code][/code]
键入此内容的目的是向新手演示如何将代码放入[code][/code]标记中。
目前,如果我键入它,正则表达式将停止在"[/code]"的第一个实例,而不会一直向前看"[code]"的第二个实例
由于我是新用户,所以无法发布图像,但以下是输出的屏幕截图:https://i.stack.imgur.com/7gS6x.png
我知道正则表达式中有一个术语叫做"积极展望"answers"消极展望",但我不太确定它们的意思,也不太确定他们是否与我的情况有关。有人能帮我一下吗?非常感谢。
编辑:很抱歉,我似乎没有足够的代表来+1任何东西。我真的很感激你的帮助,而且很快
您可以尝试这种模式的
'~'[code'](.*?)('['/code'])+~is'
如果您还想讨论两个结束标记之间可能有更多代码的情况,您可以尝试这个
'[code'].*?'['/code'](?:(?:(?!'[code']).)*'['/code'])?
在Regexr 上查看
第一部分CCD_ 1从第一打开标签匹配到第一关闭标签。
然后是棘手的部分,它现在是可选的。(?:(?:(?!'[code']).)*'['/code'])?
是匹配字符,如果后面没有开始标记,直到找到最后一个结束标记。
您所看到的只是删除(.*?)
中的?
对于?
,它是一个惰性匹配,将尽可能少地匹配几个字符,这就是为什么它在看到第一个[/code]
时停止的原因
如果没有?
,这是一个贪婪的匹配,将匹配尽可能多的字符,并将匹配到外部结束标记。