我有下面的正则表达式:
\[([^ -\]]+)( - ([^ -\]]+))+\]
成功匹配以下内容:
[abc - def - ghi - jkl]
但比赛是:
Array
(
[0] => [abc - def - ghi - jkl]
[1] => abc
[2] => - jkl
[3] => jkl
)
我需要的是这样的东西:
Array
(
[0] => [abc - def - ghi - jkl]
[1] => abc
[2] => - def
[3] => def
[4] => - ghi
[5] => ghi
[6] => - jkl
[7] => jkl
)
我可以用C#查看组的“捕获”来做到这一点。我怎么能用PHP做到呢?
4条答案
按热度按时间chy5wohz1#
这不是regexp的工作。匹配
\[([^\]]*)\]
,然后explode
是" - "
的第一个捕获。n3schb8v2#
假设示例字符串中的标记从不包含空格,并且是字母数字标记:
wmvff8tz3#
SPL preg_match_all将返回从
$matches
变量的索引1开始的正则表达式组。如果你只想得到第二个组,你可以使用$matches[2]
。语法:
结果:
这个答案是在谷歌搜索的指引下发布的问题标题的上下文。这是我在搜索这个主题时感兴趣的信息。
9gm1akwq4#
要对匹配项进行分组,请使用括号。例如:
$matches
将为['bob']
$matches
将变为['bob','b','o','b']