Как использовать preg match в массиве? - PullRequest
0 голосов
/ 12 января 2012

Если у меня есть массив:

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 ]

1 голос
/ 12 января 2012

Регулярное выражение может быть таким, используя по имени subpattern из "preg_match()" : -

<code>$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 "
";

Вы обнаружите, что ключ массива "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
        )
)

Надеюсь, это поможет.

1 голос
/ 12 января 2012

просто используйте обход массива, соответствующий регистр ex и лямбда-функцию:

$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);
1 голос
/ 12 января 2012

Вам придется перебирать массив и использовать preg_match со ссылкой.Regex что-то , подобное этому (вне моей головы), вероятно, будет работать:

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

Просто используйте preg_match('/\|(.*?)=(.*?)|?/', $subject[$x], $matches); и var_dump($matches);, чтобы увидеть результаты.

Не забывайте, что массив $ match, передаваемый в функцию preg_match, является ссылкой на массив, который вы должны сначала создать, и что он будет перезаписываться в каждом цикле цикла.

0 голосов
/ 12 января 2012

Это не ясно из вопроса, но, похоже, вы хотите preg_filter.

Эта функция может выполнять сопоставление регулярного выражения и заменять массив, возвращая новый массив, содержащий только замененные значения сопоставленных элементов.

0 голосов
/ 12 января 2012

Помимо вопроса "какой шаблон", я предлагаю вам взглянуть на preg_replace Документы , который может работать непосредственно с массивами.

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