BBCode 正则表达式在尝试将模式与回车符匹配时过于贪婪


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

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

我的基本模式如下'[col=([^"]+?)']((.|'n)+)'['/col']'

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

[col=Test]
Test
[/col]

[col=Test2]
asd
[/col]

(是的,像这样的回车:)

现在,如果我只有一个 [col] 标签,它可以工作 A-ok,但有两个这样的 col 标签,它只匹配外部 tage 并将所有内容放在一个大匹配项中,而不是两个单独的匹配项中。 我认为我的((.|'+) 正则表达式实在是太激进了,但我不知道如何缩小它。 如果我做一个简单的 (.*?),那么它不会将第一种情况与其中的回车符匹配。

谢谢!

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

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

演示