从字符串中获取键和值

Getting key and value from string

<?php
// This is my string
$input = "Lorum ipsum [tag=foo]dolor[/tag] sit [tag=bar]amet[/tag] consectetur adipiscing elit.";

// This is my pattern
$pattern = "~\[tag=(.*?)\](.*?)\[/tag\]~s";

// This should output all tags with it's value
$output = preg_split($pattern, $input);
print_r($output);
?>

它输出:

Array ( [0] => Lorum ipsum [1] => sit [2] => consectetur adipiscing elit. )

但我想要:

Array ( 
  [foo] => dolor,
  [bar] => amet
)

我做错了什么?

您可以使用 preg_match_all,它会多次应用给定的模式来查找字符串中的所有匹配项,并将它们累积到数组中的输出变量(这是第三个参数)中,如下所示:

Array
(
    [0] => Array
        (
            [0] => [tag=foo]dolor[/tag]
            [1] => [tag=bar]amet[/tag]
        )

    [1] => Array
        (
            [0] => foo
            [1] => bar
        )

    [2] => Array
        (
            [0] => dolor
            [1] => amet
        )

)

其中索引 [0] 包含整个正则表达式的所有匹配项,索引 [1] 包含模式中第一个捕获组(括号)的匹配项,[2]第二个。

然后您需要做的就是将 [1][2] 中的数组合并为一个,因此 [1] 中的值进入键,[2] 中的值进入新数组。这可以使用 array_combine

来完成
<?php
$input = "Lorum ipsum [tag=foo]dolor[/tag] sit [tag=bar]amet[/tag] consectetur adipiscing elit.";

$pattern = "~\[tag=(.*?)\](.*?)\[/tag\]~s";

// This should output all tags with it's value
if (preg_match_all($pattern, $input, $regexpresult)) {
  $output = array_combine($regexpresult[1], $regexpresult[2]);
  print_r($output);
}

输出为:

Array
(
    [foo] => dolor
    [bar] => amet
)

请使用preg_match_all获取此类索引,数组中的0个索引是匹配项,1个索引是标签名称,2个索引是标签值。 1 和 2 索引与您需要的键值的位置完全相同。

<?php
// This is my string
$input = "Lorum ipsum [tag=foo]dolor[/tag] sit [tag=bar]amet[/tag] consectetur adipiscing elit.";

// This is my pattern
$pattern = "~\[tag=(.*?)\](.*?)\[/tag\]~s";

// This should output all tags with it's value
preg_match_all($pattern, $input, $output);
print_r($output);

OUTPUT:
Array
(
    [0] => Array
        (
            [0] => [tag=foo]dolor[/tag]
            [1] => [tag=bar]amet[/tag]
        )

    [1] => Array
        (
            [0] => foo
            [1] => bar
        )

    [2] => Array
        (
            [0] => dolor
            [1] => amet
        )

)