【问题标题】:REGEX non-capturing group not working正则表达式非捕获组不起作用
【发布时间】:2012-09-13 07:02:15
【问题描述】:

数据:

今天 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] 中也包含非捕获组?

我想不通。我只期待 Array[1]。

【问题讨论】:

    标签: php regex


    【解决方案1】:

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

    如果有问题,您可以随时unset()它。

    【讨论】:

      【解决方案2】:

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

      例如,参见preg_match doc,

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-16
        • 2011-02-11
        • 2015-10-16
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多