Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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删除单行SQL注释_Java_Sql - Fatal编程技术网

使用java删除单行SQL注释

使用java删除单行SQL注释,java,sql,Java,Sql,如何使用Java从单个字符串中删除单行SQL注释? 我尝试了以下方法,但这似乎不是万无一失的。 需要一个正则表达式,当“--”字符作为文本出现在select语句中时,该正则表达式将对其进行解释,就像从dual中选择“--hi”一样 protected String removeSingleLineComments(String sql) { Pattern pattern = Pattern.compile("--[^\r\n]*"); Matcher matcher = pat

如何使用Java从单个字符串中删除单行SQL注释? 我尝试了以下方法,但这似乎不是万无一失的。 需要一个正则表达式,当“--”字符作为文本出现在select语句中时,该正则表达式将对其进行解释,就像从dual中选择“--hi”一样

   protected String removeSingleLineComments(String sql)
{

  Pattern pattern = Pattern.compile("--[^\r\n]*");
  Matcher matcher = pattern.matcher(sql);


  while(matcher.find()) {


      if((matcher.start()==0) || (matcher.start()>0 && sql.charAt(matcher.start()-1) != '\''))
  {
      sql =sql.replace(sql.substring(matcher.start(), matcher.end()), "").trim();


  }
  }
  return sql;

} 

图案看起来不错。匹配器用作:

Pattern pattern = Pattern.compile("^(([^']+|'[^']*')*)--[^\r\n]*");
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, "$1");
}
matcher.appendTail(sb);
return sb.toString();
这种模式有:

^((
    [^']+
|
    '[^']*'
)*)
--[^\r\n]*
行开始,重复非撇号字符或字符串文字。
额外的括号是让$1获取剩余的SQL。

模式看起来不错。匹配器用作:

Pattern pattern = Pattern.compile("^(([^']+|'[^']*')*)--[^\r\n]*");
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, "$1");
}
matcher.appendTail(sb);
return sb.toString();
这种模式有:

^((
    [^']+
|
    '[^']*'
)*)
--[^\r\n]*
行开始,重复非撇号字符或字符串文字。
额外的括号中有$1作为剩余的SQL。

Regexp应该是:
--.*$
,以便于携带的方式匹配行尾。

Regexp应该是:
--.*$
,以便于携带的方式匹配行尾。

只需按回车符拆分字符串,然后按“-”拆分每行:


只需按回车分隔字符串,然后按“-”分隔每行:


您的SQL示例的模式是什么?它总是一行SQL吗?多行SQL,但您只想删除最后一行注释?你的代码怎么会失败?呃,你确定你的行尾总是两个字符吗?并非每个平台都使用相同的平台。如果
模式
的值是硬编码的,则可以将其设置为常量实例
String
有一个
replaceAll()
方法,该方法将接受输入字符串(不需要
Pattern
/
匹配器);您的
if
子句可以而且应该是正则表达式的一部分。我知道String.replaceAll()。但是,我需要处理作为文本块的一部分出现的“--”,如从dual中选择“--hi”。在我的正则表达式中,文本“--hi”也会被过滤掉。我需要一个新的模式来解释文本块您的SQL示例的模式是什么?它总是一行SQL吗?多行SQL,但您只想删除最后一行注释?你的代码怎么会失败?呃,你确定你的行尾总是两个字符吗?并非每个平台都使用相同的平台。如果
模式
的值是硬编码的,则可以将其设置为常量实例
String
有一个
replaceAll()
方法,该方法将接受输入字符串(不需要
Pattern
/
匹配器);您的
if
子句可以而且应该是正则表达式的一部分。我知道String.replaceAll()。但是,我需要处理作为文本块的一部分出现的“--”,如从dual中选择“--hi”。在我的正则表达式中,文本“--hi”也会被过滤掉。我需要一个新模式来解释文本块在我的代码中,我还需要检查“---”是否不是文本块的一部分,因为从dual中选择“---hi”。在这种情况下,我的模式将不起作用。如何修改正则表达式来解释文本块?好的,考虑了的字符串文本,不考虑反斜杠。我的字符串类似于-字符串a=“--hi\n从dual\n--morecomments\n”中选择'--hi'。这个正则表达式还能用吗?是的。在我的代码中,我还需要检查“--”是否不是文本块的一部分,因为从dual中选择“--hi”。在这种情况下,我的模式将不起作用。如何修改正则表达式以解释文本块?好的,考虑了的字符串文本,而不考虑反斜杠。我的字符串类似于-string a=“--hi\n从dual\n--morecomments\n中选择“-hi”。此正则表达式仍然有效吗?是的。可以在小程序中尝试。