Php多个不同的regexp

Php多个不同的regexp,php,arrays,regex,object,explode,Php,Arrays,Regex,Object,Explode,此代码正在成功运行$数组[1]返回了列名 //My String $string = '<input value="{#Quantity#}" type="number" />'; preg_match_all('/{#(.*)#\}/i', $text, $array); print_r($array); /* Returned : Array ( [0] => Array ( [0] => {#Quantity#}

此代码正在成功运行$数组[1]返回了列名

//My String
$string = '<input value="{#Quantity#}" type="number" />';
preg_match_all('/{#(.*)#\}/i', $text, $array);
print_r($array);
/*
Returned : 
Array
(
    [0] => Array
        (
            [0] => {#Quantity#}
        )

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

)
*/
regexp应该是怎样的?
那么,如何解决这个问题呢?

您正在将文本分配给
$string
变量,然后在
preg\u match\u all
您正在使用
$text
。 我猜那只是个打字错误

现在来看问题的另一部分。您应该使用非贪婪匹配。在
*
之后添加
,使匹配不贪婪-在最短匹配处停止

如果使用
preg\u match\u all('/{{(.*?}}}/',$string,$array)
那么$array应该是这个。这就是你想要的吗

Array
(
    [0] => Array
    (
        [0] => {#Quantity#}
        [1] => {#Id#}
    )

[1] => Array
    (
        [0] => Quantity
        [1] => Id
    )

)
使用正则表达式:
'/{{{{}([^}]*)\}/'

与重复匹配
(任何字符)不同,您应该查找
[^}]
,它是“除
}
以外的任何字符”,因为
}
是您要停止匹配的地方

Match 1
Full match  14-26   `{#Quantity#}`
Group 1.    16-24   `Quantity`

Match 2
Full match  37-43   `{#Id#}`
Group 1.    39-41   `Id`

这是一个很好的答案,但是在这个表达式中,
i
-开关不是有点多余吗?在这个简单的例子中,它可以忽略不计。但是使用惰性匹配会影响性能。请参阅:以了解以下内容的说明:why@MagnusEriksson您是正确的,将编辑答案并删除该答案。@Luke您也是正确的。我只是在他已有的基础上再加上一点,寻求最简单(但不是最有效)的解决方案。
Array
(
    [0] => Array
    (
        [0] => {#Quantity#}
        [1] => {#Id#}
    )

[1] => Array
    (
        [0] => Quantity
        [1] => Id
    )

)
Match 1
Full match  14-26   `{#Quantity#}`
Group 1.    16-24   `Quantity`

Match 2
Full match  37-43   `{#Id#}`
Group 1.    39-41   `Id`