【问题标题】:Regular Expressions (pcre) for shortcode/bbcode简码/bbcode 的正则表达式 (pcre)
【发布时间】:2016-05-17 15:33:39
【问题描述】:

我有一个正则表达式(参见https://regex101.com/r/mB7vQ8/2):

/\[content_box((.*?)!?\])(.*?)\[\/content_box\]/ig

用于匹配文本中的所有[content_box](带有或不带有标签参数),例如:

[content_boxes foo=bar][content_box baz=foo]text[/content_box][/content_boxes]
[content_box]text[/content_box]
[content_box foo=bar]text[/content_box]

我的正则表达式工作,但如果 [content_box] 包含在 [content_boxes] 中,则规则将失败匹配(强):

[content_boxes foo=bar][content_box baz=foo]text[/content_box][/content_boxes]

[content_box]文本[/content_box]

[content_box foo=bar]text[/content_box]

预期的匹配是:

[content_boxes foo=bar][content_box baz=foo]text[/content_box][/content_boxes]

[content_box]文本[/content_box]

[content_box foo=bar]text[/content_box]

在线查看https://regex101.com/r/mB7vQ8/2

如何解决?

【问题讨论】:

  • 有一点没看懂。您说but if [content_boxes] is included in a [content_boxes],但您的示例在[content_boxes] 复数中显示了[content_box] 单数。是不是打错字了?
  • @JorgeCampos 很抱歉这是一个错字...

标签: regex pcre


【解决方案1】:

您可以将此正则表达式与单词边界一起使用:

~\[content_box\b\s*([^]]*)\](.*?)\[/content_box\]~

RegEx Demo

这里的content_box\b 将不匹配content_boxes 并且匹配将始终是内部[content_box ..] 标记。

【讨论】:

  • 我认为他还需要从他的正则表达式中分组的[^]]*
猜你喜欢
  • 2018-06-02
  • 2012-06-22
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2014-08-02
  • 1970-01-01
相关资源
最近更新 更多