我已经设法让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
,它是数字的缩写,而不是.*?
,它是任何东西。
我还删除了t
的t+
,因为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 演示