在 groovy(匹配器组)中访问多行字符串中的多个匹配项

Accessing multiple matches in a multiline string in groovy (matcher groups)

在 groovy 我有这个多行字符串,我正在尝试使用 matcher 和正则表达式 pattern使用 [x][y] 符号提取数字:

String input = """\
2234 This is a sample text
1424 This second 2335 line
This id third 455 line
Welcome to Tutorialspoint
        """.stripIndent()

println ((input =~ "^([0-9]+).*")[0][1])
println ((input =~ "^([0-9]+).*")[1][1])

当我 运行 以上时,我得到:

2234

java.lang.IndexOutOfBoundsException: index is out of range -1..0 (index = 1)

所以我可以使用 [0][1] 访问第一个号码 2234,但是如何访问下一个号码?

更一般地说,多维数组对匹配器的访问如何工作+记录?

我发现:

https://blog.mrhaki.com/2009/09/groovy-goodness-matchers-for-regular.html

和:

Groovy syntax for regular expression matching

但这并不能真正解释谁访问了多个组以及为什么有必要使用多维索引。

String input = """\
    2234 This is a sample text
    1424 This second 2335 line
    This id third 455 line
    Welcome to Tutorialspoint
    """.stripIndent()
    
input.findAll(/[0-9]+/)

如果您只想在每行的开头添加数字:

input.findAll(/(?m)^[0-9]+/)

在你的例子中,正则表达式匹配整个字符串。

您可以指定多行标记 (?m) 来逐行处理输入

println ((input =~ "(?m)^([0-9]+).*")[0][1])
println ((input =~ /(?m)^([0-9]+).*/)[1][1])

https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#MULTILINE