【问题标题】:PHP preg_match_all not working as expecteded [duplicate]PHP preg_match_all 没有按预期工作[重复]
【发布时间】:2021-01-16 03:26:46
【问题描述】:

这是我的代码,

$msg = "{yellow:red} ERROR:  {blue:light_grey}";
$pattern = "/{(.*)}/";
$a = preg_match_all($pattern, $msg, $regex);

我期待以下 2 场比赛:

{yellow:red}
{blue:light_grey}

但我的结果是:

Array
(
    [0] => Array
        (
            [0] => {yellow:red} ERROR:  {blue:light_grey}
        )

    [1] => Array
        (
            [0] => yellow:red} ERROR:  {blue:light_grey
        )

)

有什么想法吗?

【问题讨论】:

  • 关键字 - 贪婪搜索。

标签: php regex preg-match-all


【解决方案1】:

我会改成这样:

{([^}]*)}

如果你还想包含 {} 那么

({[^}]*})

【讨论】:

  • 做或不做。没有“尝试”。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
【解决方案2】:

您想要的正则表达式应该是:({[^}]*})


$msg = "{yellow:red} ERROR:  {blue:light_grey}";
$pattern = "({[^}]*})";
$a = preg_match_all($pattern, $msg, $regex);

  • ( - 括号捕获一个组

  • { - 匹配字符 { 字面意思(区分大小写)

  • [^ - 匹配列表中不存在的单个字符

  • * - 在零次和无限次之间匹配,在这种情况下,所有字符都在给定字符之间。在这种情况下:{ }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2012-11-01
    • 2011-12-01
    • 1970-01-01
    • 2021-08-14
    • 2013-03-25
    相关资源
    最近更新 更多