groovy 的正则表达式不起作用

Regex for groovy not working

请在下面找到我的代码。我正在尝试遍历文件和目录并打印出与正则表达式的所有匹配项:(&)(.+?\b) 然而这似乎不起作用(它 returns 一个空字符串)。我哪里错了?

import groovy.io.FileType

class FileExample {
    static void main(String[] args) {

        def list = []

        def dir = new File("*path to dir*")
        dir.eachFileRecurse (FileType.FILES) { file ->
            list << file.name;
            def s= "${file.text}";
            def w = s.toString();
            w.readLines().grep(~/(&)(.+?\b)/)
        }
    }
}

我想通了:

import groovy.io.FileType
class FileExample {
   static void main(String[] args) {

        def list = []
        def dir = new File("/path/to/directory/containingfiles")
        def p = []
        dir.eachFileRecurse (FileType.FILES) { 
            file -> list << file.name
            def s = file.text
            def findtp = (s =~ /(&)(.+?\b)/)
            findtp.each {
                p.push(it[2])
                // As I'm only interested in the second matched group
            }
        }
        p.each { 
            println it
            }
        }
    }

现在,所有匹配的字符串都存储在数组 p 中,并且可以 printed/used 通过 p[0] 等在其他地方

w.readLines().grep(~/(&)(.+?\b)/) 不做任何输出,它给你匹配行作为 return 值,所以如果你把它改成 println w.readLines().grep(~/(&)(.+?\b)/)w.readLines().grep(~/(&)(.+?\b)/).each { println it },你会在 stdout.

上打印匹配的行

顺便说一句。

 def s= "${file.text}";
 def w = s.toString();
 w.readLines()

只是浪费时间。和file.text.readLines().

完全一样

"${file.text}" 是一个 GString,它在求值时替换了占位符,但是由于除了 file.text 占位符之外什么都没有,这与 file.text as Stringfile.text.toString().

但由于 file.text 实际上已经是 String,它与 file.text 相同。

即使你需要 GString 因为你有比占位符更多的东西,GString 已经有一个 readLines() 方法,所以不需要使用 .toString() 首先,即使需要 GString