关于php:BBCode Regex在尝试将模式与回车匹配时太贪心了

BBCode Regex is too greedy when trying to match pattern with a carriage return

我正在使用preg_replace来匹配字符串中的bbcode模式,并将其替换为我自己的html。

我的基本模式如下

现在我要运行它的字符串是:

1
2
3
4
5
6
7
8
9
10
11
[col=Test]

Test

[/col]



[col=Test2]
asd
[/col]

(是的,马车像那样返回。)

现在,如果我只有一个[col]标记,它可以工作A-OK,但是有两个这样的col标记,它只匹配外部标记,并将所有内容放在一个大匹配中,而不是两个单独的匹配中。我认为我的(.+)regex太激进了,但我不知道如何缩小它。如果我做一个简单的(.*?)然后它将与第一个案例中的回车不匹配。

谢谢您!


使用dotall修饰符(?s)使点也与换行符匹配。

1
(?s)\[col=([^"]+?)\](.+?)\[\/col\]

演示