3

我正在使用正则表达式模式来查找 [code][/code] BB 标签的实例。(这是在 PHP 中使用 preg_match / preg_relace / 等的珍珠型正则表达式)

'~\[code\](.*?)\[\/code\]~is'

好吧,我的问题是我怎样才能做到这样有人可以输入类似的内容:

[code][code]code here[/code][/code]

键入此内容的目的是向新手演示如何将他们的代码放入 [code][/code] 标签中。

目前,如果我输入,正则表达式将在“[/code]”的第一个实例处停止,而不是继续向前看“[code]”的第二个实例

由于我是新用户,我无法发布图片,但这里是输出的屏幕截图:http: //i.imgur.com/t8zNh.png

我知道正则表达式中有一个术语叫做“积极展望”和“消极展望”,但我不太确定它们的含义,或者它们是否与我的情况相关。有人可以帮帮我吗?谢谢你。

编辑:我很抱歉,但我似乎没有足够的代表 +1 任何东西。我非常感谢您的帮助,而且速度非常快。

4

3 回答 3

2

你可以试试这个模式

'~\[code\](.*?)(\[\/code\])+~is'
于 2012-02-10T04:40:06.207 回答
1

如果您还想涵盖两个结束标签之间可能有更多代码的情况,您可以试试这个

\[code\].*?\[\/code\](?:(?:(?!\[code\]).)*\[\/code\])?

在 Regexr 上查看

第一部分\[code\].*?\[\/code\]是从第一个开始标签到第一个结束标签的匹配。

然后是现在可选的棘手部分。(?:(?:(?!\[code\]).)*\[\/code\])?匹配字符,如果后面没有开始标签,直到找到最后一个结束标签。

于 2012-02-10T07:44:26.233 回答
0

您所看到的只是?删除(.*?)

使用?, 这是一个惰性匹配,将匹配尽可能少的字符,这就是为什么它在看到第一个字符时停止[/code]

如果没有?,这是一个贪婪匹配,将匹配尽可能多的字符,并且匹配到外部结束标记。

于 2012-02-10T04:33:50.513 回答