2014-02-13 3 views
0

В настоящее время я пытаюсь написать программу java для извлечения сообщений из файла ps pllq.Использование регулярных выражений для извлечения сообщений из исходного кода

Общий формат сообщения о упак будет,

Тип 01;

Error_Msg.General_Message(pkg_name_,'INVALIDVALUE: The value 1,2 and 3 that you have entered is invalid.');

Но в некоторых случаях сообщение может быть следующим,

Тип 02:

Error_Msg.General_Message(pkg_name_,'INVALIDVALUE: The value :p you have entered is invalid.', Some_Pkg.Some_Function(parameter1, parameter2)); 

Примечание: р является переменной связывания

Иногда сообщения могут быть объединены с помощью '||' в plslql,

EX:

Error_Msg.General_Message(pkg_name_, 'This is a multiline'||' 
    message'); 

Мне нужно извлечь только текстовое сообщение, для примера в Type 01 текст, который я смотрю на это

«InvalidValue: значения 1,2 и 3, которые вы ввели, являются недопустимыми ».

Я пытался с этим рисунком,

\\s*(\\w+):\\s*[,-:\\w*\\s*\"\\.\\|\\'\\(\\)\\\\]+ 

Но это будет возвращать неверный результат во втором типе сообщения.

Может ли кто-нибудь помочь мне с этим?

Спасибо!

+0

может быть поиск по ERROR_MSG. string, затем найдите первый ', затем перейдите в конец строки и отмените поиск первого'. возьмите все в betweem – Randy

ответ

1

Возможно, вы могли бы попробовать что-то вроде этого?

\\s*(\\w+):\\s*(?:'\\s*\\|\\|\\s*'|[^'])+' 

regex101 demo

'\\s*\\|\\|\\s*' будет соответствовать многострочный часть и позволить регулярное выражение, чтобы продолжить согласование.

+0

@pragan Добро пожаловать :) – Jerry

+0

Привет, Джерри Я попытался изменить сообщение, чтобы поймать сообщения, такие как Error_Msg.General_Message (pkg_name_, 'INVALIDVALUE: Это многострочное' сообщение '); Но я застрял с ним еще, мог что-то предложить? – pragan

+0

@pragan Является ли 'p' также многострочным? Если да, то вы можете использовать '(?: \\ | \\ || p)' вместо '\\ \\\ |' в регулярном выражении. [Вот обновленная демонстрация] (http://regex101.com/r/vJ3gF7) – Jerry

0

Вы хотите извлечь все между первым и вторым '? String#substring в сочетании с String#indexOf кажется менее загадочным.

+0

Но между сообщением также может быть Ex: Error_Msg.General_Message (pkg_name_, 'Это многострочный' || ' message'); – pragan

+0

Crap - а как насчет первого и последнего? – Smutje

+0

Это может быть возможно, но это может произойти в сценарии типа Error_Msg.General_Message (pkg_name _, 'INVALIDVALUE: значение, которое вы ввели: неверно.', Some_Pkg.Some_Function (параметр1, 'parameter2')); – pragan

0

Если предположить, что не будет никаких одинарные кавычки внутри '...'

Error_Msg\\.General_Message\\([^,]+,'(?![^']+:[a-zA-Z0-9])([^']*)' 
Смежные вопросы