PHP正则表达式查找未被另一个BBCode包围的BBCode


PHP regex find BBCode that is not surrounded by another BBCode

我使用以下正则表达式在论坛帖子中查找IMG bbcode及其内容:

~'[img(?:=[''"]?([^,]*?)(?:,[^]''"]+)?[''"]?)?]([^'[]+)?'[/img]~i

到目前为止,这是有效的,但我需要定义例外。我必须找到所有的IMG bbcode,它们没有被TT或CODE bbcode包围。我并没有试图解析BBCodes(因为这是由论坛软件本身完成的)。

因此,我想要来自这里的img bbcode(它正在工作,使用上面的regex):

Hello, this is an example: [img]xxx[/img] - Yay!

但不是从那里

[tt]this is a test [img]xxx[/img] yolo![/tt]

而不是从这里

[code=php]<?php
echo '[img=xxx][/img]';[/code]

有什么想法吗,如何做到这一点?我使用的是PHP(只是以防万一,只使用正则表达式的解决方案是不可能的)。

您也可以使用T-Regx库

pattern(''[((?:(?!img).)*?)'](?:.*?)'['/'1']|'[img.*'](.*?)'['/img']')->test($input)

您可以将此模式用于匹配的第二个子模式

'[((?:(?!img).)*?)'](?:.*?)'['/'1']|'[img.*'](.*?)'['/img']  

http://regex101.com/r/tF1tX3/2