0

这是我的字符串:

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

我需要一个正则表达式来提取 koko、zizi 和 mimi

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

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

我应该只得到科科和咪咪。

'---' 是一些文本。

我试过了

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",
                     },   
}
4

3 回答 3

1

为什么不只是:

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

正则表达式 101 演示

于 2013-09-09T14:16:36.123 回答
0

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

$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
        )

)
于 2013-09-09T14:24:26.117 回答
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
        )

)
于 2013-09-09T17:53:43.080 回答