preg_match_all包含空格和逗号分隔符

时间:2012-07-26 18:27:32

标签: php regex preg-match-all

我设法让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

1 个答案:

答案 0 :(得分:2)

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

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

另外,我使用的是\d,它是数字的简写,而不是.*?,这是任何东西。

我还删除了t+的{​​{1}},因为t将匹配t+一次或多次,这似乎不是您想要做的。

要使第二组可选,您需要使用t修饰符:

?

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

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

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

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

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

{loadsegment 123,}

说明(减去分隔符):

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

Demo at RegExr