Php多个不同的regexp
此代码正在成功运行$数组[1]返回了列名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#}
//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`