Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式从源代码中提取消息_Java_Regex_Pattern Matching - Fatal编程技术网

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

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

目前,我正在尝试编写一个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_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])([^']*)'