我有这样的BBCode。
[IMG]art_74e7e4f8811380426577.jpeg[/IMG] [IMG]art_74e7e4f8811380426595.jpeg[TITLE]title is always needy[/TITLE][/IMG]
我需要提取两张图片。所以我的preg_match_all是:
preg_match_all('/\[IMG\][^(\[\/IMG\])]+/', $body, $matches);
这给了我这个:
[0] => [IMG]art_74e7e4f8811380426577.jpeg
[1] => [IMG]art_74e7e4f8811380426595.jpeg
我需要将标题标记包含在第二次出现中。真的卡住了......
答案 0 :(得分:1)
使用它来获取图像标记:
preg_match_all('~\[img\].*?\[/img\]~i', $body, $matches);
i
修饰符用于不区分大小写的匹配。
如果您不想获取图片代码,请使用lookarounds:
preg_match_all('~(?<=\[img\]).*?(?=\[/img\])~i', $body, $matches);
顺便说一句:[^(\[\/IMG\])]+
将匹配除(
,[
,/
,I
,M
,{{1}以外的任何字符},G
,]
)
是一个积极的外观,并确保您的匹配前面有(?<=\[img\])
和
[img]
是一个积极的前瞻,确保您的匹配在(?=\[/img\])
之后。这些不计为匹配,因此它们不会在您的捕获组中返回。
答案 1 :(得分:0)
您可以尝试:
preg_match_all('~\[IMG\].*?\[/IMG\]+~i', $body, $matches);