PHP preg_match_all 未按预期工作

PHP preg_match_all not working as expecteded

这是我的代码,

$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
        )

)

有什么问题吗?

我会将常规更改为:

{([^}]*)}

如果您还想包括 {} 那么

({[^}]*})

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


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

  • ( - 括号捕获一组

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

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

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