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] => 
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥15 小红薯封设备能解决的来
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'
  • ¥15 vue+element项目中多tag时,切换Tab时iframe套第三方html页面需要实现不刷新
  • ¥50 深度强化学习解决能源调度问题