带有空格和逗号分隔符的preg_match_all


preg_match_all with space and comma delimiters

我已经设法让preg_match的一部分返回我需要的值,但无法获得正确的语法来返回逗号后的字符串。感谢任何帮助-感谢

$regex = '{loadsegment+(.*?)}';
$input = '{loadsegment 123,789}';
preg_match_all($regex, $input, $matches, PREG_SET_ORDER);

当前结果:

$matches [0] [0] {loadsegment 123}
             [1] 123,789

所需结果

$matches [0] [0] {loadsegment 123,789}
             [1] 123
             [2] 789

在逗号(和分隔符)前后需要两个捕获组:

$regex = "/{loadsegment ('d+),('d+)}/";

此外,我使用的是'd,它是数字的缩写,而不是.*?,它是任何东西。

我还删除了tt+,因为t+将与t匹配一次或多次,这似乎不是你想要做的。

为了使第二组可选,您可以使用?修饰符:

/{loadsegment ('d+),('d+)?}/

但这仍然需要逗号。你也可以选择。。。

/{loadsegment ('d+),?('d+)?}/

但现在您的正则表达式将匹配:

{loadsegment 123,}

这可能是我们不想要的。因此,我们将逗号包含在可选的第二组中,如下所示:

/{loadsegment ('d+)(?:,('d+))?}/

说明(减去分隔符):

{loadsegment   - Match "{loadsegment "
('d+)          - Match one or more digits, store in capturing group 1
(?:            - Non-capturing group (so this won't be assigned a capturing group number
    ,          - Match a comma
    ('d+)      - Match one or more digits, store in capturing group 2
)
?              - Make the entire non-capturing group optional

RegExr 演示