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 String
或 file.text.toString()
.
但由于 file.text
实际上已经是 String
,它与 file.text
相同。
即使你需要 GString
因为你有比占位符更多的东西,GString
已经有一个 readLines()
方法,所以不需要使用 .toString()
首先,即使需要 GString
。
请在下面找到我的代码。我正在尝试遍历文件和目录并打印出与正则表达式的所有匹配项:(&)(.+?\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 String
或 file.text.toString()
.
但由于 file.text
实际上已经是 String
,它与 file.text
相同。
即使你需要 GString
因为你有比占位符更多的东西,GString
已经有一个 readLines()
方法,所以不需要使用 .toString()
首先,即使需要 GString
。