golang regexp FindStringSubmatch()不返回正确的最后一个组

时间:2018-03-21 13:07:31

标签: go

我正在使用go1.10 darwin / amd64,这是代码:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    raw := "012 abc 012"
    r := regexp.MustCompile(`(\d+).*(\d+)`)
    m := r.FindStringSubmatch(raw)
    fmt.Printf("len(m)=%v\n%v\n%v\n%v\n", len(m), m[0], m[1], m[2])
}

输出是:

  

len(m)= 3

     

012 abc 012

     

012

     

2

您也可以在此处运行:https://play.golang.org/p/i2zlhClB72e

我希望m [2]的输出是“012”而不是“2”。

有谁能让我知道问题出在哪里?非常感谢。

1 个答案:

答案 0 :(得分:2)

正则表达式是贪婪的,因此01将与2匹配,只留下\d+以匹配最终的(\d+)[^\d]*(\d+)$

您可能希望将表达式更改为以下内容:len(m)=3 012 abc 012 012 012 以匹配数字序列(捕获),除数字序列之外的任何数字,数字序列(捕获)以及结束线。

其余的相同代码将打印出您的预期:

InfInt myint1 = "15432154865413186646848435184100510168404641560358";
    InfInt myint2 = 156341300544608LL;

    myint1 *= --myint2 - 3;
    std::cout << myint1 << std::endl;