用于捕获 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[^}]+(?=})
$url = 'dashboard/admin/{content}/category/{category}/posts';
preg_match_all('/{\K[^}]+(?=})/', $url, $matches);
print_r($matches[0]);
结果:
Array
(
[0] => content
[1] => category
)
我试图通过正则表达式模式从字符串中获取值,
它有效,但它会 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[^}]+(?=})
$url = 'dashboard/admin/{content}/category/{category}/posts';
preg_match_all('/{\K[^}]+(?=})/', $url, $matches);
print_r($matches[0]);
结果:
Array
(
[0] => content
[1] => category
)