PHP正则表达式找到没有被另一个BBCode包围的BBCode

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

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

这工作到目前为止,但我需要定义例外。 我必须找到所有的IMG bb代码,这些bb代码没有被TT-或者代码bbcode包围。 我不想解析BBCodes(因为这是由论坛软件本身完成的)。

所以我想从这里的img bbcode(这是工作,使用上面的正则表达式):

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(以防万一,只有正则表达式解决方案是不可能的)。


您可以针对第二个子模式使用此模式进行匹配

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

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

链接地址: http://www.djcxy.com/p/29879.html

上一篇: PHP regex find BBCode that is not surrounded by another BBCode

下一篇: PHP How to do htmlspecialchars() when i have preg