用于捕获 PHP 中特定值的正则表达式

Regex for capturing specific values in PHP

我试图通过正则表达式模式从字符串中获取值, 它有效,但它会 return 所有匹配的字符串(我的意思是带有 {} 的字符串)

这是字符串:

dashboard/admin/{content}/category/{category}/posts

正则表达式模式:

/{(.*?)}/

并且 PHP 代码是:

    preg_match_all('/{(.*?)}/', $url, $matches, PREG_SET_ORDER, 0);

$matches的内容是:

array:2 [
  0 => array:2 [
    0 => "{content}"
    1 => "content"
  ]
  1 => array:2 [
    0 => "{category}"
    1 => "category"
  ]
]

但我想要一个这样的数组:

array:2 [
  0 => "content",
  1 => "category"
]

删除 PREG_SET_ORDER 以便索引按捕获组排列。

preg_match_all('/{(.*?)}/', 'dashboard/admin/{content}/category/{category}/posts', $matches);

与此一起使用 $matches[1],因为 1 将是第一个捕获组。 0 索引将全部匹配。

使用环视:

$url = 'dashboard/admin/{content}/category/{category}/posts';
preg_match_all('/(?<={).*?(?=})/', $url, $matches, PREG_SET_ORDER, 0);
print_r($matches);

输出:

Array
(
    [0] => Array
        (
            [0] => content
        )

    [1] => Array
        (
            [0] => category
        )

)

您可以利用 \K 和一个正向前瞻来断言右边的是 }:

{\K[^}]+(?=})

Regex demo

$url = 'dashboard/admin/{content}/category/{category}/posts';
preg_match_all('/{\K[^}]+(?=})/', $url, $matches);
print_r($matches[0]);

结果:

Array
(
    [0] => content
    [1] => category
)

Php demo