Preg_match_all重复组

时间:2013-09-09 14:13:46

标签: php regex preg-match-all

这是我的字符串:

zzzzzzz-------eh="koko"------eh="zizi"--------eh="mimi"--------xxxxxx

我需要一个reg-expression来提取koko,zizi和mimi

但是eh ='zizi'是可选的: 所以,如果它不存在,如:

zzzzzzz----------eh="koko"-----------------eh="mimi"----------xxxxxx

我应该只得到koko和mimi。

'---'是一些文字。

我试过

preg_match_all('#zzzzzzz(.*eh="([^"]*)"){2,3}.*xxxxxx#Uix',  $strg , $out, PREG_SET_ORDER);

但它不起作用。

注意:整个事情就像:

zzzzzzz--...--xxxxxxzzzzzzz--...--xxxxxxzzzzzzz--...--xxxxxxzz...

我需要他们分组

喜欢:

array():{
         [0]:array():{
                       [0]:"zizi",
                       [1]:"mimi",
                       [2]:"koko",
                     },
          [1]:array():{
                       [0]:"zizi",
                       [1]:"koko",
                     },
         [2]:array():{
                       [0]:"zizi",
                       [1]:"fofo",
                       [2]:"bingo",
                     },   
}

3 个答案:

答案 0 :(得分:1)

为什么不呢:

preg_match_all('/(?<=eh=")([^"]+)(?=")/', $strg, $out, PREG_SET_ORDER);

Regex101 Demo

答案 1 :(得分:0)

这可以通过捕获="之前的所有字符串来解决,直到找到"

$s='zzzzzzz-------eh="koko"------eh="zizi"--------eh="mimi"--------xxxxxx';
if (preg_match_all('~(?<==")[^"]*~', $s, $arr))
   print_r($arr);

<强>输出:

Array
(
    [0] => Array
        (
            [0] => koko
            [1] => zizi
            [2] => mimi
        )

)

答案 2 :(得分:0)

怎么样:

$str = 'zzzzzzz-------eh="koko"------eh="zizi"--------eh="mimi"--------xxxxxxzzzzzzz----------eh="koko"-----------------eh="mimi"----------xxxxxx';
$arr = preg_split('/(?<=x)(?=z)/', $str);
foreach($arr as $s) {
    preg_match_all('/"([^"]+)"/', $s, $out);
    $arr_out[] = $out[1];
}
print_r($arr_out);

<强>输出:

Array
(
    [0] => Array
        (
            [0] => koko
            [1] => zizi
            [2] => mimi
        )

    [1] => Array
        (
            [0] => koko
            [1] => mimi
        )

)