Php多个不同的正则表达式

时间:2017-01-18 23:20:21

标签: php arrays regex object explode

此代码已成功运行。 $ array [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
        )

)
*/

但是如果文本中有更多列名。它不起作用:

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

    [1] => Array
        (
            [0] => Quantity#}" data-id="{#Id
        )

)
*/

我想要这个数组

Array
(
    [0] => Array
        (
            [0] => {#Quantity#}" data-id="{#Id#}
        )

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

)

正则表达式应该如何? 那么,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您要将文本分配到$string变量,然后分配到preg_match_all  您正在使用$text。 我猜这只是一个错字?

现在问题的其他部分。你应该使用非贪婪的比赛。在?之后添加.*会使比赛变得非贪婪 - 在最短的比赛中​​停止。

如果您使用preg_match_all('/{#(.*?)#\}/', $string, $array); 然后$ array应该是这个。这就是你追求的吗?

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

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

)

答案 1 :(得分:1)

使用RegEx:'/{#([^}]*)#\}/'

除了重复匹配.(任何字符)之外,您应该查找[^}],这是&#34;除}&#34;之外的任何字符。因为}是你想要停止匹配的地方。

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

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