正则表达式从[shortcode]中提取变量 [英] Regex extract variables from [shortcode]

查看:100
本文介绍了正则表达式从[shortcode]中提取变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



字符串内容:

/ p>


不相关的tekst ...
[sublimevideo class =sublime
poster =http:// video。 host.com/_previews/600x450/sbx-60025-00-da-ANA.png
src1 =http://video.host.com/_video/H.264/LO/sbx-60025-00 -da-ANA.m4v
src2 =(hd) http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v
width =560 height =315]
.. more不相关的文本。


我需要找到所有的变量, sublimevideo ...]并将其转换成数组:

  Array(
class =>sublime
poster =>http://video.host.com/_previews/600x450/sbx-60025-00-da-FMT.png
src1 =>http://video.host的.com / _视频/ H.264 / LO / SBX-60 025-00-da-FMT.m4v
src2 => (hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-FMT.m4v
width => 560
height => 315

最好处理短码的多个实例。



我想可以用preg_match_all()完成,但我没有运气。

解决方案>

这将给你你想要的。

  $ data ='不相关的tekst ... [sublimevideo class =sublimeposter =http://video.host .com / _previews / 600x450 / sbx-60025-00-da-ANA.pngsrc1 =http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA。 m4vsrc2 =(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4vwidth =560height =315]。更不相关的文字。 

$ dat = array();
preg_match(/ \ [sublimevideo(。+?)\] /,$ data,$ dat);

$ dat = array_pop($ dat);
$ dat = explode(,$ dat);
$ params = array();
foreach($ dat as $ d){
list($ opt,$ val)= explode(=,$ d);
$ params [$ opt] = trim($ val,''');
}

print_r($ params);

预计您将处理短代码时遇到的下一个挑战,您可以使用preg_replace_callback替换短标签数据及其结果标记。

  $ data ='不相关tekst ... [sublimevideo class =sublimeposter =http://video.host.com/ _previews / 600x450 / sbx-60025-00-da-ANA.pngsrc1 =http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4vsrc2 =(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4vwidth =560height =315] ..更不相关文本'; 

函数processShortCode($ matches){
//解析参数
$ dat = explode(,$ matches [2]);
$ params = array();
foreach($ dat as $ d){
list($ opt,$ val)= explode(=,$ d);
$ params [$ opt] = trim($ val,'');
}
switch($ matches [1]){
casesublimevideo:
//这里是要从shorttag调用返回结果标记的地方。
return print_r($ params,true);
}

}
$ data = preg_replace_callback(/ \ [(\w +)(。+?)] /,processShortCode,$ data);
echo $ data;


After migrating some content from WordPress to Drupal, I've got som shortcodes that I need to convert:

String content:

Irrelevant tekst... [sublimevideo class="sublime" poster="http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1="http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v" src2="(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v" width="560" height="315"] ..more irrelevant text.

I need to find all variables within the shortcode [sublimevideo ...] and turn it into an array:

Array (
    class => "sublime"
    poster => "http://video.host.com/_previews/600x450/sbx-60025-00-da-FMT.png"
    src1 => "http://video.host.com/_video/H.264/LO/sbx-60025-00-da-FMT.m4v"
    src2 => "(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-FMT.m4v"
    width => "560"
    height => "315"
)

And preferably handle multiple instances of the shortcode.

I guess it can be done with preg_match_all() but I've had no luck.

解决方案

This will give you what you want.

$data = 'Irrelevant tekst... [sublimevideo class="sublime" poster="http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1="http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v" src2="(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v" width="560" height="315"] ..more irrelevant text.';

$dat = array();
preg_match("/\[sublimevideo (.+?)\]/", $data, $dat);

$dat = array_pop($dat);
$dat= explode(" ", $dat);
$params = array();
foreach ($dat as $d){
    list($opt, $val) = explode("=", $d);
    $params[$opt] = trim($val, '"');
}

print_r($params);

In anticipation of the next challenge you will face with processing short codes you can use preg_replace_callback to replace the short tag data with it's resultant markup.

$data = 'Irrelevant tekst... [sublimevideo class="sublime" poster="http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1="http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v" src2="(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v" width="560" height="315"] ..more irrelevant text.';

function processShortCode($matches){
    // parse out the arguments
    $dat= explode(" ", $matches[2]);
    $params = array();
    foreach ($dat as $d){
        list($opt, $val) = explode("=", $d);
        $params[$opt] = trim($val, '"');
    }
    switch($matches[1]){
        case "sublimevideo":
            // here is where you would want to return the resultant markup from the shorttag call.
             return print_r($params, true);        
    }

}
$data = preg_replace_callback("/\[(\w+) (.+?)]/", "processShortCode", $data);
echo $data;

这篇关于正则表达式从[shortcode]中提取变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆