我有一个正则表达式(请参阅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_bboxes]
[content_box]text[/content_box]
[content_box-foo=bar]text[/content_box]
预期匹配为:
[content_boxes foo=bar][content_box-baz=foo]text[/content_box][/content_bboxes]
[content_box]text[/content_box]
[content_box-foo=bar]text[/content_box]
在线查看https://regex101.com/r/mB7vQ8/2
如何解决?
您可以将此正则表达式与单词边界一起使用:
~[content_boxbs*([^]]*)](.*?)[/content_box]~
RegEx演示
这里content_boxb
将不匹配content_boxes
,并且匹配将始终是内部[content_box ..]
标签。