1

数据:

今天 13/9 : Aristides, Aristeides, Aristeidis, Kornelios, Kornilios, Kornelia (来源: www.namedays.gr)

正则表达式模式:

/(?:today \d{1,2}\/\d{1,2}\s\:\s)([\w[:blank:],]+)(?:\s\(source\s\:\swww\.namedays\.gr\))/

结果:

Array
(
    [0] => today 13/9 : Aristides, Aristeides, Aristeidis, Kornelios, Kornilios, Kornelia (source : www.namedays.gr)
    [1] => Aristides, Aristeides, Aristeidis, Kornelios, Kornilios, Kornelia
)

我的问题是,为什么我的模式不只返回名称 -> Array[1] 以及为什么在我的结果 Array[0] 中也包含非捕获组?

我想不明白。我只期待数组 [1]。

4

2 回答 2

3

0th 个捕获组始终包含整个匹配的文本。第一个捕获组始终是$1(或命名的)。

如果这是一个问题,你总是unset()可以的。

于 2012-09-13T07:04:24.620 回答
1

一切都是正确的。第 0 组始终是整场比赛,不分组,第 1 组是第一个捕获组结果。

例如,参见preg_match文档,

如果提供了匹配项,则将其填充为搜索结果。$matches[0] 将包含与完整模式匹配的文本,$matches[1] 将包含与第一个捕获的带括号的子模式匹配的文本,依此类推。

于 2012-09-13T07:06:39.713 回答