[英]Java Regex find/replace pattern in SQL comments
我只想在SQL注释(单行注释-和块注释/ * * /)中查找/替换字符/模式。 源字符串是一个SQL脚本。
目前,我正在注释中搜索分号(;),并希望将其替换为空格。
资源
CREATE OR REPLACE PROCEDURE TESTDBA.PROC_REUSING_BINDED_VAR_N_DSQL
AS
a NUMBER:=2;
b NUMBER:=3; -- jladjfljaf; lakjflajf
-- alksdjflkjaf ladkjf
v_plsql_tx VARCHAR2(2000);
begin
v_plsql_tx := 'BEGIN ' || ' :1 := :1 + :2; ' || 'END;';
execute immediate v_plsql_tx
using in out a, b;
insert into testdba.NEW_TESTING_TABLE(CHARACTER_VALUE) VALUES('a='||a);
end PROC_REUSING_BINDED_VAR_N_DSQL;
-- lajdflajf
/*lakjdfljalfdk; alkdjf*/
/*asdf
;
asdfa*/
/*
adf
asd asdf
*/
你能建议点什么吗?
谢谢
我会这样做:
try {
Pattern regex = Pattern.compile("(?:/\\*[^;]*?\\*/)|(?:--[^;]*?$)", Pattern.DOTALL | Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// matched text: regexMatcher.group()
// match start: regexMatcher.start()
// match end: regexMatcher.end()
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}
以上将为您提供所有不带';'的注释。 然后我将逐行遍历sql文件,当我遇到一行带有注释的行时,我将检查该行是否在我的匹配项列表中-如果没有,则将搜索replace; 整个注释中带有“”。 当然,您将必须找到注释的结尾位置,但这很容易-在同一行和/ *处以及在找到第一个* /时结束。 这样,您可以更改任何数量的; 具有相同的代码。
最好的选择是使用两个正则表达式和两个模式(一个单行和一个多行)。
单行: \\\\-\\\\-[^;]*(;)
-不确定找到多个的最佳方法;
在一行内
多行: /\\\\*[^;(\\\\*/)]*?(;)[^;]*?\\\\*/
-无论如何
首先需要了解的内容:处理多行注释的方式有两种。
第一个相对容易实现。 第二种方法只能通过深度魔术正则表达式(阅读:以后的编码人员无法维护)或使用简短的程序来完成。
第一个很简单:只要有嵌入式分号,使用“ /\\*.*;..*\\*/”就会为您提供匹配。
第二个将需要一些编程。 如果遇到“;”,则需要检查当前是否在注释中。 您可以通过顺序读取文件(忽略回车/换行)并在遇到“ / *”时增加一个数字,而在遇到“ * /”时减少一个数字来知道。 如果数字至少为1,则分号位于注释中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.