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

时间:2016-06-01 15:45:04

标签: regex groovy jira

我正在尝试让我的脚本接受“已批准”或“已批准”的评论等。每当用户批准时,他们可能在评论中有一些签名导致脚本无法运行。

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

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

任何人都知道我应该添加什么来接受新线路?

感谢。

1 个答案:

答案 0 :(得分:1)

使用(?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)

编辑: 在上面的解决方案中,它只会选择从第一个发现到结束的所有内容。因此,这是一个更好的解决方案(使用(?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) - 匹配不区分大小写
  • ^ - 一行开头

所以在任何字母大小写中以“已批准”开头的每一行都会匹配该表达式。 可选地,你可以在最后添加。*:/(?mi )^approved。* /以匹配之后的文本。 “批准”。在这种情况下,输出将是:

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