使用正则表达式从源代码中提取消息

时间:2014-02-13 17:12:27

标签: java regex pattern-matching

目前我正在尝试编写一个java程序来从plsql pkg文件中提取消息。

pkg的常规消息格式为

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

注意:: p是绑定变量

有时可以使用“||”连接消息在plslql中,

EX:

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

我需要提取唯一的文本消息,对于01类中的示例,我正在寻找的文本是

  

'INVALIDVALUE:您输入的值1,2和3无效。'

我尝试了这种模式,

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

但是这会在第二种消息类型中返回错误的结果。

有人可以帮我解决这个问题吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

也许你可以试试这样的东西?

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

regex101 demo

'\\s*\\|\\|\\s*'将与多线部分匹配,并允许正则表达式继续匹配。

答案 1 :(得分:0)

您想要在第一个和第二个'之间提取所有内容吗? String#substringString#indexOf结合使用似乎不那么神秘。

答案 2 :(得分:0)

假设'...'

中没有单引号
Error_Msg\\.General_Message\\([^,]+,'(?![^']+:[a-zA-Z0-9])([^']*)'