我设法让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
答案 0 :(得分:2)
在逗号(和分隔符)之前和之后需要两个捕获组:
$regex = "/{loadsegment (\d+),(\d+)}/";
另外,我使用的是\d
,它是数字的简写,而不是.*?
,这是任何东西。
我还删除了t+
的{{1}},因为t
将匹配t+
一次或多次,这似乎不是您想要做的。
要使第二组可选,您需要使用t
修饰符:
?
但这仍然需要逗号。你也可以选择它......
/{loadsegment (\d+),(\d+)?}/
...但现在你的正则表达式将匹配:
/{loadsegment (\d+),?(\d+)?}/
我们可能不想要。因此,我们在可选的第二组中包含逗号,如下所示:
{loadsegment 123,}
说明(减去分隔符):
/{loadsegment (\d+)(?:,(\d+))?}/