目前我正在尝试编写一个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*\"\\.\\|\\'\\(\\)\\\\]+
但是这会在第二种消息类型中返回错误的结果。
有人可以帮我解决这个问题吗?
谢谢!
答案 0 :(得分:1)
也许你可以试试这样的东西?
\\s*(\\w+):\\s*(?:'\\s*\\|\\|\\s*'|[^'])+'
'\\s*\\|\\|\\s*'
将与多线部分匹配,并允许正则表达式继续匹配。
答案 1 :(得分:0)
您想要在第一个和第二个'
之间提取所有内容吗? String#substring
与String#indexOf
结合使用似乎不那么神秘。
答案 2 :(得分:0)
假设'...'
Error_Msg\\.General_Message\\([^,]+,'(?![^']+:[a-zA-Z0-9])([^']*)'