【问题标题】:BBCode Regex is too greedy when trying to match pattern with a carriage return尝试将模式与回车匹配时,BBCode Regex 过于贪婪
【发布时间】:2015-01-16 03:24:11
【问题描述】:

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

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

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

[col=Test]

Test

[/col]



[col=Test2]
asd
[/col]

(是的,那些回车是这样的:)

现在,如果我只有一个 [col] 标签,它可以正常工作,但是有两个这样的 col 标签,它只匹配外部标签,并将所有内容放在一个大匹配中,而不是两个单独的匹配。我认为我的 ((.|\n+) 正则表达式太激进了,但我不知道如何缩小它。如果我做一个简单的 (.*?) 那么它将与第一个案例与马车不匹配在里面返回。

谢谢!

【问题讨论】:

  • 这对你有用吗php.net/manual/en/book.bbcode.php ?而且我认为那里有很多 BBCode 解析器,你为什么要自己解析呢?
  • “这是我的正则表达式”“在这种情况下它不起作用”。它“工作”意味着什么?你想精确匹配什么模式?

标签: php regex preg-replace


【解决方案1】:

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

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

DEMO

【讨论】:

  • 顶礼膜拜先生。这做到了!允许时将在 5 分钟内接受
猜你喜欢
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 2014-07-06
  • 1970-01-01
  • 2012-11-17
  • 2020-06-09
  • 2013-06-09
相关资源
最近更新 更多