从php中的mediawiki标记中获取类别值

时间:2016-01-11 23:51:13

标签: php preg-match mediawiki

我正在努力从循环中的wiki标记文本中重新获取类别值,无法使用php中的正则表达式匹配从标记中获取类别值

标记文本包含类别值

$input_wiki_markup = "
[[Category:Google]]
[[Category:Tricks]]
[[Category:Google Search]]
[[Category:Filters]]
[[Category:Search]]
[[Category:Tips]]";

这是我到目前为止所尝试的内容

$matches = array();
           if(preg_match("/\[\[(Category):(.+)*\]\]/i", $input_wiki_markup, $matches)){
               print_r($matches);
           }

这是输出

 Array
(
    [0] => [[Category:Google]][[Category:Tricks]][[Category:Google Search]][[Category:Filters]][[Category:Search]][[Category:Tips]]
    [1] => Category
    [2] => Google]][[Category:Tricks]][[Category:Google Search]][[Category:Filters]][[Category:Search]][[Category:Tips
)

但是我试图在冒号之后只输出带有类别值的输出数组,即

 Array
(
    [0] => Google
    [1] => Tricks
    [2] => Google Searcg
)

等等。

我应该对我的正则表达式进行哪些更改,以便只在$ mathces数组中填充类别值 或者我应该使用oter php函数而不是preg_match?

请注意,$input_wiki_markup还包含[[Categpry:xyz]]标记周围的其他文字

1 个答案:

答案 0 :(得分:1)

all you need was an all

$input_wiki_markup="
[[Category:Google]]
[[Category:Tricks]]
[[Category:Google Search]]
[[Category:Filters]]
[[Category:Search]]
[[Category:Tips]]
";

$matches = array();
           if(preg_match_all("/\[\[(Category):(.+)*\]\]/i", $input_wiki_markup, $matches)){
               print_r($matches);
           }

OUTPUT:

Array
(
[0] => Array
    (
        [0] => [[Category:Google]]
        [1] => [[Category:Tricks]]
        [2] => [[Category:Google Search]]
        [3] => [[Category:Filters]]
        [4] => [[Category:Search]]
        [5] => [[Category:Tips]]
    )

[1] => Array
    (
        [0] => Category
        [1] => Category
        [2] => Category
        [3] => Category
        [4] => Category
        [5] => Category
    )

[2] => Array
    (
        [0] => Google
        [1] => Tricks
        [2] => Google Search
        [3] => Filters
        [4] => Search
        [5] => Tips
    )

)