REGEX非捕获组无法正常工作

时间:2012-09-13 07:02:15

标签: php regex

数据:

  

今天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
)

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

我无法理解。我只期待Array [1]。

2 个答案:

答案 0 :(得分:3)

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

如果这是一个问题,您可以随时unset()

答案 1 :(得分:1)

一切都是正确的。无论组如何,第0组始终是整个匹配,第1组是第一个捕获组结果。

例如,请参阅preg_match doc,

  

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