我有几个带有自定义宏标记的文本。我想解析这些标签的内容,但我想以不同的方式对待那些带有参数的标签。
我需要从这些括号内容中构建有效的 URL。
例子:
这是我的文字:
{gallery}events/2016-02-18-Sunny-Sport-Day,single=IMG_0336.jpg,salign=left{/gallery}
嘿!我们度过了美好的一天,进行了一场艰难但有趣的比赛。我们的团队进行了一场精彩的比赛,并且能够获得第二名。
{gallery}events/2016-02-18-Sunny-Sport-Day{/gallery}
{gallery}团队/成员{/gallery}
所以我需要在 {gallery} 标签之间提取字符串的路径部分,但我不想将那些与参数匹配,例如“single=IMG_0336.jpg,salign=left”,因为这些是分开处理的。
我需要做以下事情的东西:
{gallery}events/2016-02-18-Sunny-Sport-Day,single=IMG_0336.jpg,salign=left{/gallery}
变成
第一个输出:events/2016-02-18-Sunny-Sport-Day
第二个输出:IMG_0336.jpg
和
{gallery}events/2016-02-18-Sunny-Sport-Day{/gallery}
变成
事件/2016-02-18-Sunny-Sport-Day
尝试了以下正则表达式:
/\{gallery\}(.*?)(?!single=)\{\/gallery\}/
但它始终匹配包括单个参数在内的整个字符串。
为了获取单个参数的内容,我尝试了以下操作:
/,single=(.*?),/
这仅适用于单个参数,但我不知道如何将所有内容组合在一起。
结论:
在 PHP 环境中,我希望输出两个数组。第一个仅包含文件夹:
以及由单个文件路径组成的第二个数组:
此方法将提取您想要的子字符串并根据您的要求准备输出数据:Pattern Demo
PHP 代码:(演示)
$str="{gallery}events/2016-02-18-Sunny-Sport-Day,single=IMG_0336.jpg,salign=left{/gallery}
Hey there! We had a great day with a tough but funny competition. Our team had a great race and was able to finish in second place.
{gallery}events/2016-02-18-Sunny-Sport-Day{/gallery}
{gallery}team/members{/gallery}";
preg_match_all('@\{gallery\}([^,]*?)(?:,single=([^,{]+).*?)?\{/gallery\}@',$str,$out);
// Matches array:
var_export($out);
echo "\n\n---\n\n";
// Folders only array:
var_export(array_filter(array_slice($out,1)[0],'strlen'));
echo "\n\n---\n\n";
// Path + Image files array:
foreach($out[2] as $i=>$v){
if($v){
$result[]="{$out[1][$i]}/$v";
}
}
var_export($result);\
输出:
array (
0 =>
array (
0 => '{gallery}events/2016-02-18-Sunny-Sport-Day,single=IMG_0336.jpg,salign=left{/gallery}',
1 => '{gallery}events/2016-02-18-Sunny-Sport-Day{/gallery}',
2 => '{gallery}team/members{/gallery}',
),
1 =>
array (
0 => 'events/2016-02-18-Sunny-Sport-Day',
1 => 'events/2016-02-18-Sunny-Sport-Day',
2 => 'team/members',
),
2 =>
array (
0 => 'IMG_0336.jpg',
1 => '',
2 => '',
),
)
---
// Folders only array:
array (
0 => 'events/2016-02-18-Sunny-Sport-Day',
1 => 'events/2016-02-18-Sunny-Sport-Day',
2 => 'team/members',
)
---
// Path + Image files array:
array (
0 => 'events/2016-02-18-Sunny-Sport-Day/IMG_0336.jpg',
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句