我有正则表达式(请参阅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
如何解决?
答案 0 :(得分:3)
您可以将此正则表达式用于单词边界:
~\[content_box\b\s*([^]]*)\](.*?)\[/content_box\]~
此处content_box\b
与content_boxes
不匹配,匹配将始终为内部[content_box ..]
标记。