如何在数组中使用preg_match?

时间:2012-01-12 08:03:11

标签: php arrays preg-match

如果我有一个数组:

Array
(
    [0] => Array
        (
            [0] => |174|September|2001| 
            [1] => |Pengantar=Hello!!!!
            [2] => |Tema= Sami Mawon 
            [3] => |Tema_isi=meet you!!!
            [4] => |Kutip=people
            [5] => |Kutip_kitab=Efesus
            [6] => |Kutip_pasal=4
            [7] => |Kutip_ayat=28
            [8] => |Tema_sumber=Kiriman dari Maurits albert (romind@ )
            [9] => [[Kategori:e-humor 2001]]
        ) 

如何获得Pengantar,Tema,Tema_isi等的价值?

5 个答案:

答案 0 :(得分:1)

您将不得不循环遍历数组并将preg_match与引用一起使用。 像这样的正则表达式 (在我的头脑中)可能会起作用:

/\|(.*?)=(.*?)|?/

只需使用preg_match('/\|(.*?)=(.*?)|?/', $subject[$x], $matches);var_dump($matches);即可查看结果。

不要忘记传入preg_match函数的$ matches数组是对数组的引用,您应首先实例化该数组,并在每个循环周期中覆盖它。

答案 1 :(得分:1)

只使用数组遍历,匹配的reg ex和lambda函数:

$array = array(
    array(
        '|174|September|2001|',
        'Pengantar=Hello!!!!',
        'Tema= Sami Mawon ',
        'Kategori:e-humor 2001',
            [...]
    )
);

$values = array();

array_walk($array[0],function(&$item1, $key) use(&$values) {
    if(preg_match('#[^=]=(.+)#',$item1,$match)){
        $values[] = $match[1];
    }
});

print_r($values);

答案 2 :(得分:1)

正则表达式可以是这样的,使用named subpattern"preg_match()": -

$a = array(
    array(
        '|174|September|2001|',
        '|Pengantar=Hello!!!!',
        '|Tema= Sami Mawon',
        '|Tema_isi=meet you!!!',
        '|Kutip=people',
        '|Kutip_kitab=Efesus',
        '|Kutip_pasal=4',
        '|Kutip_ayat=28',
        '|Tema_sumber=Kiriman dari Maurits albert (romind@ )',
        '[[Kategori:e-humor 2001]]',
    )
);
$pattern = '/(?<first>\w+)[:=](?<rest>[\d|\w|\s]+)/';
$matches = array();
foreach ($a as $_arrEach) {
    foreach ($_arrEach as $_each) {
        $result = preg_match($pattern, $_each, $matches[]);
    }
}

echo "<pre>";
print_r($matches);
echo "</pre>";

您会发现数组键“first”符合您的要求。

以上将输出为: -

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
            [0] => Pengantar=Hello
            [first] => Pengantar
            [1] => Pengantar
            [rest] => Hello
            [2] => Hello
        )

    [2] => Array
        (
            [0] => Tema= Sami Mawon
            [first] => Tema
            [1] => Tema
            [rest] =>  Sami Mawon
            [2] =>  Sami Mawon
        )

    [3] => Array
        (
            [0] => Tema_isi=meet you
            [first] => Tema_isi
            [1] => Tema_isi
            [rest] => meet you
            [2] => meet you
        )

    [4] => Array
        (
            [0] => Kutip=people
            [first] => Kutip
            [1] => Kutip
            [rest] => people
            [2] => people
        )

    [5] => Array
        (
            [0] => Kutip_kitab=Efesus
            [first] => Kutip_kitab
            [1] => Kutip_kitab
            [rest] => Efesus
            [2] => Efesus
        )

    [6] => Array
        (
            [0] => Kutip_pasal=4
            [first] => Kutip_pasal
            [1] => Kutip_pasal
            [rest] => 4
            [2] => 4
        )

    [7] => Array
        (
            [0] => Kutip_ayat=28
            [first] => Kutip_ayat
            [1] => Kutip_ayat
            [rest] => 28
            [2] => 28
        )

    [8] => Array
        (
            [0] => Tema_sumber=Kiriman dari Maurits albert 
            [first] => Tema_sumber
            [1] => Tema_sumber
            [rest] => Kiriman dari Maurits albert 
            [2] => Kiriman dari Maurits albert 
        )

    [9] => Array
        (
            [0] => Kategori:e
            [first] => Kategori
            [1] => Kategori
            [rest] => e
            [2] => e
        )
)

希望它有所帮助。

答案 3 :(得分:0)

除了“哪种模式”之外,我建议你看一下能够直接在数组上运行的preg_replace­Docs

$pattern = "...";
$matches = preg_replace($pattern, '\1', $array);

答案 4 :(得分:0)

问题不明确,但看起来你想要preg_filter

此函数可以执行正则表达式匹配并替换数组,返回一个只包含匹配项的替换值的新数组。