Использование (? 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)
EDIT: В растворе над ним будет просто выбрать все, от первой находки до конца. Поэтому, здесь лучшее решение (с использованием (я), как @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
объяснение:
- (? м) - многострочный модификатор поддержки. В этом случае '.' не соответствует новому символу строки. поэтому любая строка будет проверяться отдельно.
- (я?) - матч регистронезависимы
- ^- начало строки
так что каждая строка, которая начинается с «утвержден» в любом случае буквы, будет соответствовать этому выражению. необязательно, вы можете добавить. * В конце: /(?mi)^approved.*/, чтобы соответствовать тексту после. «Утвержден». в этом случае выход будет следующим:
m[0] = approved my signature
m[1] = Approved new signature
m[2] = APPROVED old signature
m[3] = apprOved
Не могли бы вы привести пример для комментария? –