BBCode 正则表达式在尝试将模式与回车匹配时过于贪婪 return
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]
(是的,像那样的马车 returns :)
现在,如果我只有一个 [col] 标签,它可以正常工作,但是如果有两个这样的 col 标签,它只会匹配外部标签,并将所有内容放在一个大匹配中,而不是两个单独的匹配中。我认为我的 ((.|\n+) 正则表达式太激进了,但我不知道如何缩小它。如果我做一个简单的 (.*?) 那么它就不会匹配第一个案例与马车returns在里面。
谢谢!
使用 DOTALL 修饰符 (?s)
使点与换行符匹配。
(?s)\[col=([^"]+?)\](.+?)\[\/col\]
我正在使用 preg_replace 来匹配字符串中的 BBCode 模式并将其替换为我自己的 HTML.
我的基本模式如下\[col=([^"]+?)\]((.|\n)+)\[\/col\]\
现在我尝试 运行 的字符串是:
[col=Test]
Test
[/col]
[col=Test2]
asd
[/col]
(是的,像那样的马车 returns :)
现在,如果我只有一个 [col] 标签,它可以正常工作,但是如果有两个这样的 col 标签,它只会匹配外部标签,并将所有内容放在一个大匹配中,而不是两个单独的匹配中。我认为我的 ((.|\n+) 正则表达式太激进了,但我不知道如何缩小它。如果我做一个简单的 (.*?) 那么它就不会匹配第一个案例与马车returns在里面。
谢谢!
使用 DOTALL 修饰符 (?s)
使点与换行符匹配。
(?s)\[col=([^"]+?)\](.+?)\[\/col\]