我有一系列可能的属性:
$attributes = ['color','size'];
我的网址部分如下所示:
color-light-grey-size-xs
我需要获取一系列属性及其值,即:
$values = [
'color' => 'light-grey',
'size' => 'xs'
]
是否可以使用正则表达式?
答案 0 :(得分:1)
正则表达式,您必须提供其属性集群ORed:
(\w++)(?>-(\w+-?(?(?!color|size)(?-1))*))
^^^^^^^^^^
PHP代码:
$str = "color-light-grey-test-size-xs";
$attrs = ['color', 'size'];
$array = [];
preg_replace_callback(
"/(\w++)(?>-(\w+-?(?(?!" . implode("|", $attrs) . ")(?-1))*))/",
function($matches) use (&$array) {
$array[$matches[1]] = rtrim($matches[2], '-');
},
$str
);
print_r($array);
注意:订单根本不重要。
答案 1 :(得分:0)
我会告诉你一些事情。
只有当您知道第一个值为color
且第二个值为size
时,您才可以匹配它:
\bcolor\-([\w\d\-]+)-size-([\w\d\-]+)\b
您将获得颜色$1
和尺寸$2
但如果你不知道你的网址会是什么样子,那么你就会遇到大问题。
您必须知道您对所有网址的期望,并为每个组合制作匹配项。