我只想在 SQL 注释(单行注释和 block 注释/* */)中查找/替换字符/模式。源字符串是一个 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 文件,当我遇到有注释的行时,我会检查该行是否在我的匹配列表中——如果不在,我会搜索替换;在整个评论中使用 ' '。当然,您必须找到注释结束的位置,但这很容易——在同一行和/* 以及找到第一个 */时结束。这样你就可以改变任意数量的;使用相同的代码。
关于SQL 注释中的 Java Regex 查找/替换模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7753836/