Java 使用正则表达式从源代码中提取消息
目前,我正在尝试编写一个java程序,从plsql pkg文件中提取消息 pkg的一般消息格式为 01型Java 使用正则表达式从源代码中提取消息,java,regex,pattern-matching,Java,Regex,Pattern Matching,目前,我正在尝试编写一个java程序,从plsql pkg文件中提取消息 pkg的一般消息格式为 01型 Error_Msg.General_Message(pkg_name_,'INVALIDVALUE:您输入的值1、2和3无效') 但在某些情况下,信息可能如下: 类型02: Error_Msg.General_Message(pkg_name_,'INVALIDVALUE: The value :p you have entered is invalid.', Some_Pkg.Some_F
Error_Msg.General_Message(pkg_name_,'INVALIDVALUE:您输入的值1、2和3无效')代码>
但在某些情况下,信息可能如下:
类型02:
Error_Msg.General_Message(pkg_name_,'INVALIDVALUE: The value :p you have entered is invalid.', Some_Pkg.Some_Function(parameter1, parameter2) );
注意::p是一个绑定变量
有时,可以在plslql中使用“| |”连接消息
例:
我只需要提取文本消息,例如,在Type 01中,我要查找的文本是
'INVALIDVALUE:您输入的值1、2和3无效。'
我试过这个图案
\\s*(\\w+):\\s*[,-:\\w*\\s*\"\\.\\|\\'\\(\\)\\\\]+
但这将在第二种消息类型中返回错误的结果
有人能帮我吗
谢谢 是否要提取第一个和第二个之间的所有内容String#substring
与String#indexOf
的组合似乎不那么神秘。也许你可以试试这样的东西
\\s*(\\w+):\\s*(?:'\\s*\\|\\|\\s*'|[^'])+'
'\\s*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
将匹配多行部分,并允许正则表达式继续匹配。假设中没有单引号。
Error_Msg\\.General_Message\\([^,]+,'(?![^']+:[a-zA-Z0-9])([^']*)'
可能搜索错误消息。字符串,然后查找第一个“然后转到行尾并反向搜索第一个”。将所有内容都放在中间,但消息之间也可能有“s”,例如:Error_Msg.General_message(pkg_name_124;这是一条多行消息);废话-那么第一个和最后一个呢?这可能是可能的,但在以下情况下会失败:错误消息\u Msg.General\u消息(pkg\u name\uu,'INVALIDVALUE:the value:p您输入的值无效')、一些pkg.Some\u函数(参数1,'parameter2');嗨,Jerry,我试图修改模式以捕获诸如Error_Msg.General_Message(pkg_name_,'INVALIDVALUE:这是一条多行'p'消息)之类的消息;但我还是坚持着,能不能提出一些建议??@pragan也是多行的p
?如果是,那么您可以在正则表达式中使用(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。对不起,我忘了提到它,它可能是任何东西,例如:这是一条“强调一些文本”消息我尝试了这个\s*(\w+)::“(\s*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*(\w+):“\s*(?:”\s*(?:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*
。该构造可能很危险,并且会大大降低处理速度。内部的\\n\\r
用于防止匹配溢出到其他行中。
Error_Msg\\.General_Message\\([^,]+,'(?![^']+:[a-zA-Z0-9])([^']*)'