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

时间:2014-10-20 20:31:43

标签: php regex bbcode

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

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

到目前为止,这是有效的,但我需要定义例外。我必须找到所有IMG bbcode,它们不被TT或CODE 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(以防万一,只能使用正则表达式解决方案)。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您也可以使用T-Regx library

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