doujiao9426 2014-09-15 16:46
浏览 53
已采纳

使用正则表达式捕获重复的组

I'm trying to build a comma separated list of the items. The items are made up of what is in the quotes embedded in expression similar to the following two examples.

The list is from a session file, comprising a starting text identifier, followed by a or s to indicate array/string, a number to indicate how many items in the array (0 if there is no array) - here's a couple of examples:

extralistids|a:3:{i:0;s:3:"id1";i:1;s:4:" id2";i:2;s:4:" id3";}
extralistids|s:0:"";

I've got the following preg_match expression but it only captures "id3" - any thoughts what I am doing wrong?

/extralistids.+?(?:{).*?("(.*?)"(?:.*?))+;(?:})/
  • 写回答

1条回答 默认 最新

  • dongyou9818 2014-09-15 17:06
    关注

    If you want to use the string extralistids in your pattern then try the below regex.

    (?:\bextralistids\||(?<!^)\G)[^"]*\"([^"
    ]*)"
    

    DEMO

    <?php
    $mystring =<<<EOT
    extralistids|a:3:{i:0;s:3:"id1";i:1;s:4:" id2";i:2;s:4:" id3";}
    extralistids|s:0:""
    EOT;
    $regex = '~(?:\bextralistids\||(?<!^)\G)[^"]*\"([^"
    ]*)"~';
    preg_match_all($regex, $mystring, $matches);
    print_r($matches[1]);
    ?>
    

    Output:

    Array
    (
        [0] => id1
        [1] =>  id2
        [2] =>  id3
        [3] => 
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?