SQL 注释中的 Java Regex 查找/替换模式

标签 java regex

我只想在 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/

相关文章:

javascript - 在 javascript 中使用正则表达式无效组错误

regex - Shell 正则表达式到行尾

java - Java 中的正则表达式与文本文件中的任何内容都不匹配

java - 如何在 Jersey 中处理 POST 请求中的重复参数

java - 配置win和linux的路径

java - 使用 FEST 进行多个 JUnit 测试

java - Mysql DB连接JDBC卡住程序

regex - 使用反向引用的字母顺序正则表达式

java - 使用 XSL 将 XML 转换为 CSV - 如何检索 foreach 中标记的值

javascript - 正则表达式通过javascript从字符串中删除重复的字符