【问题标题】:Php multiple different regexpphp多个不同的正则表达式
【发布时间】:2017-06-03 12:40:04
【问题描述】:

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

)

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

【问题讨论】:

    标签: php arrays regex object explode


    【解决方案1】:

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

    现在是问题的另一部分。你应该使用非贪婪匹配。在 .* 之后添加 ? 会使匹配不贪心 - 停在最短的匹配处。

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

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

    【讨论】:

    • 这是一个很好的答案,但i-switch 在这个表达式中不是有点多余吗?
    • 在这种简单的情况下,它的差异可以忽略不计。但是使用惰性匹配会影响性能。请参阅:regular-expressions.info/repeat.html#lazy 了解原因
    • @MagnusEriksson 你是对的,将编辑答案并将其删除。
    • @Luke 你也是正确的。我只是添加了他已经拥有的东西,然后选择了最简单(但不是最高效)的解决方案。
    【解决方案2】:

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

    不要重复匹配.(任何字符),您应该寻找[^}],它是“除} 之外的任何字符”,因为} 是您要停止匹配的位置。

    Match 1
    Full match  14-26   `{#Quantity#}`
    Group 1.    16-24   `Quantity`
    
    Match 2
    Full match  37-43   `{#Id#}`
    Group 1.    39-41   `Id`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-03
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 2018-06-21
      • 1970-01-01
      • 2014-08-08
      相关资源
      最近更新 更多