短代码/ bbcode的正则表达式(pcre)

时间:2016-05-17 15:33:39

标签: regex pcre

我有正则表达式(请参阅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

如何解决?

1 个答案:

答案 0 :(得分:3)

您可以将此正则表达式用于单词边界:

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

RegEx Demo

此处content_box\bcontent_boxes不匹配,匹配将始终为内部[content_box ..]标记。