我试图通过正则表达式模式从字符串中获取值,
可以,但是它会返回所有匹配的字符串(我的意思是也带有{}
的字符串)
这是字符串:
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"
]
答案 0 :(得分:2)
使用环顾四周:
$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
)
)
答案 1 :(得分:1)
删除PREG_SET_ORDER
,以使索引按捕获组排序。
preg_match_all('/{(.*?)}/', 'dashboard/admin/{content}/category/{category}/posts', $matches);
使用$matches[1]
,因为1
将是第一个捕获组。 0
索引将完全匹配。
答案 2 :(得分:0)
您可以利用\K
和一个正面正向断言来断定右边的是}
:
{\K[^}]+(?=})
$url = 'dashboard/admin/{content}/category/{category}/posts';
preg_match_all('/{\K[^}]+(?=})/', $url, $matches);
print_r($matches[0]);
结果:
Array
(
[0] => content
[1] => category
)