Groovy 中的正则表达式接受多行

Regex in Groovy to accept multiple lines

我试图让我的脚本接受 "approved" 或 "Approved" 等评论。每当用户批准时,他们可能会在评论中有一些签名,这导致脚本无法运行。

到目前为止,这是我的正则表达式:

 def regexStr = /^[A|a][P|p][P|p][R|r][O|o][V|v][E|e][D|d]?/

有人知道我应该添加什么让它接受新行吗?

谢谢。

使用 (?s) 会导致 .包括换行符 这是一个例子:

def exp = /(?s)([A|a][P|p][P|p][R|r][O|o][V|v][E|e][D|d])(.*)/
def approve = '''approved my signature
Approved new signature
APPROVED old signature
apprOved'''
approve.find(exp)

编辑: 在上面的解决方案中,它只是 select 从第一个 find 到最后的所有内容。因此,这是一个更好的解决方案(使用 (?i) 作为 @cfric 在评论中建议的):

def exp = /(?mi)^approved/
def approve = '''approved my signature
Approved new signature
APPROVED old signature
apprOved'''
def m = approve =~ exp
m.eachWithIndex{ match, idx ->
    println "m[${idx}] = ${match}"
}

输出:

m[0] = approved
m[1] = Approved
m[2] = APPROVED
m[3] = apprOved

说明:

  • (?m) - 多行支持修饰符。在这种情况下,'.'不会匹配换行符。所以任何一行都会被单独检查。
  • (?i) - 不区分大小写
  • ^ - 行首

所以以 "approved" 开头的每一行,无论大小写,都会匹配该表达式。 或者,您可以在末尾添加 .*:/(?mi)^approved.*/ 以匹配后面的文本。 "approved"。在这种情况下,输出将是:

m[0] = approved my signature
m[1] = Approved new signature
m[2] = APPROVED old signature
m[3] = apprOved