2016-06-01 2 views
0

Я пытаюсь заставить мой сценарий принимать одобренные или одобренные комментарии и т. Д. Всякий раз, когда пользователь утверждает, что у них может быть какая-то подпись в комментарии, которая вызывает сценарий не работать.Regex in Groovy принять несколько строк

Вот мое регулярное выражение до сих пор:

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

Каждый знает, что я должен добавить к этому, чтобы он принимает новые линии?

Спасибо.

+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) 

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 
+0

и (? I) сделал бы это случай insenstive – cfrick

+0

@cfrick да. Включено в мое редактирование. –

Смежные вопросы