V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaome
V2EX  ›  PHP

求组一个正则的问题,希望各位 dalao 赐教

  •  
  •   xiaome · 2016-07-20 00:15:35 +08:00 · 2401 次点击
    这是一个创建于 3056 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚接触正则,想实现一个类似 UBB 的“简码”功能,不知道思路对不对。

    直接贴代码吧

    function shortcode_parse($text) {
    $atts = array();
    $pattern = '/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*\'([^\']*)\'(?:\s|$)|([\w-]+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
    if ( preg_match_all($pattern, $text, $match, PREG_SET_ORDER) ) {
        foreach ($match as $value ) {
            if (!empty($value [1]))
                $atts[strtolower($value [1])] = $value [2];
            elseif (!empty($value [3]))
                $atts[strtolower($value [3])] = $value [4];
            elseif (!empty($value [5]))
                $atts[strtolower($value [5])] = $value [6];
            elseif (isset($value [7]) && strlen($value [7]))
                $atts[] = $value [7];
            elseif (isset($value [8]))
                $atts[] = $value [8];
        }
    }
    return $atts;
    }   
    
    $atts = '[test id1="xxx" id2="xxx" id3="xxx" id4="xxx"]';
    $attx = shortcode_parse($atts);
    
    print_r($attx);
    

    现在实现出来是这样的:

    Array
    (
        [0] => [test
        [id1] => xxx
        [id2] => xxx
        [id3] => xxx
        [1] => id4="xxx"]
    )
    

    希望实现下面这样的效果:

    Array
    (
        [0] => [
        [1] => test
        [id1] => xxx
        [id2] => xxx
        [id3] => xxx
        [id4] => xxx
        [2] => ]
    )
    

    希望各位 dalao 可以为小弟解惑,谢谢。

    第 1 条附言  ·  2016-07-20 23:41:17 +08:00

    好像没说清楚,就是我想把下面这段“简码”用正则替换成数组。

    上面的代码已经简单实现了,可是并没有达到我需要的效果

    简码:

    [test id1="xxx" id2="xxx" id3="xxx" id4="xxx"]
    

    数组:

    Array
    (
        [0] => [
        [1] => test
        [id1] => xxx
        [id2] => xxx
        [id3] => xxx
        [id4] => xxx
        [2] => ]
    )
    
    4 条回复    2016-07-22 15:01:12 +08:00
    stormouse
        1
    stormouse  
       2016-07-20 20:33:46 +08:00
    额…能稍微说的再清楚一点吗,下面那个效果是什么意思= =
    hanmiao
        2
    hanmiao  
       2016-07-20 21:11:12 +08:00
    @xiaome
    xiaome
        3
    xiaome  
    OP
       2016-07-20 23:42:55 +08:00
    @stormouse 追加了信息,大概描述出来了。
    kair
        4
    kair  
       2016-07-22 15:01:12 +08:00
    (\[)(\w*) id\d=\"(.*)\"(\])
    是不是这种效果?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2583 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:42 · PVG 18:42 · LAX 02:42 · JFK 05:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.