PHP正则表达式 - 匹配字符串中的属性和值

时间:2017-09-16 12:39:48

标签: php regex

我有一系列可能的属性:

$attributes = ['color','size'];

我的网址部分如下所示:

color-light-grey-size-xs

我需要获取一系列属性及其值,即:

$values = [
    'color' => 'light-grey',
    'size' => 'xs'
]

是否可以使用正则表达式?

2 个答案:

答案 0 :(得分:1)

正则表达式,您必须提供其属性集群ORed:

(\w++)(?>-(\w+-?(?(?!color|size)(?-1))*))
                     ^^^^^^^^^^ 

Regex live demo

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);

PHP live demo

注意:订单根本不重要。

答案 1 :(得分:0)

我会告诉你一些事情。

只有当您知道第一个值为color且第二个值为size时,您才可以匹配它:

\bcolor\-([\w\d\-]+)-size-([\w\d\-]+)\b

您将获得颜色$1和尺寸$2

的2个匹配数组

但如果你不知道你的网址会是什么样子,那么你就会遇到大问题。

您必须知道您对所有网址的期望,并为每个组合制作匹配项。

以下是实例:https://regex101.com/r/3daBXx/1