Следующий groovy-скрипт выдает желаемый результат (хотя и не записывает в файл, но я полагаю, что вы легко можете добиться этого):
def regex = "[0-9]+-[^']+'([^']+)'[^\r\n]*\r?\n?"
def source = """
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'stoerungbeh_¤eben_moduleaccess_triage_1',
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'otherbeheben_üü'
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'stoerungbeheben_moduleaccess_triage_1',
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'thirdhbeheben_äÄ_moduleaccess_triage_1'
2012-02-21 05:16:47,205 ERROR - No KPI mapping found for kpi 'stoerungbeheben_mo&%duleaccess_triage_1',
"""
java.util.regex.Pattern p = java.util.regex.Pattern.compile(regex)
java.util.regex.Matcher m = p.matcher(source)
while(m.find()) {
println(m.group(1))
}
Выходы:
stoerungbeh_¤eben_moduleaccess_triage_1
otherbeheben_üü
stoerungbeheben_moduleaccess_triage_1
thirdhbeheben_äÄ_moduleaccess_triage_1
stoerungbeheben_mo&%duleaccess_triage_1
EDIT:
Объяснение модели было бы длинным комментарием, поэтому добавил его к ответу:
Статья в Википедии содержит довольно полную таблицу метасимволов регулярных выражений: http://en.wikipedia.org/wiki/Regular_expression#Examples
IMO лучший способ выучить и понять регулярные выражения - это написать и выполнить зоны регулярных выражений для различных произвольных строк.
Шаблон далек от оптимального, но вот некоторые объяснения для [0-9] + - [^ '] +' ([^ '] +)' [^ \ r \ n] * \ r? \ N ?:
[0-9] + - => + знак означает совпадение 1 или более чисел от 0 до 9. Затем остановитесь на дефисе (пример: 2012- ). Это для решения случая, если нет новой строки или это последняя строка.
[^ '] +' => соответствует 1 или более символам, которые не являются апострофами, и останавливаются на апострофе (пример: -02-21 05: 16: 47,205 ОШИБКА - нет сопоставления KPI найдено для kpi ').
([^ '] +)' => сопоставить и захватить 1 или более символов, не являющихся апострофами, и остановиться на апострофе (пример: stoerungbeheben_moduleaccess_triage_1 'где из захваченной части в скобках есть: stoerungbeheben_moduleaccess_triage_1) .
[^ \ r \ n] * => соответствует 0 или более символам, которые не являются символом возврата каретки (\ r) или новой строки (\ n) (пример: , ) .
\ r? => сопоставить возврат каретки, если он существует.
\ n? => соответствует символу новой строки, если он существует.