正则从指定sql脚本中获取use后数据库名称(JAVA)

现在用的是://数据库名称可能有下划线,需要获取的可能是USETEST和USE[TEST]两种Patterncompile=Pattern.compile("(?i)us... 现在用的是:
//数据库名称可能有下划线,需要获取的可能是 USE TEST和USE [TEST]两种
Pattern compile = Pattern.compile("(?i)use\\s+\\[?\\s*(\\w+)\\s*\\]?");
StringBuilder sql = new StringBuilder("USE TEST").append("\r\n");
sql.append("GO").append("\r\n");
sql.append("CREATE TABLE TEST_TABLE(").append("\r\n");
sql.append("IS_USE VARCHAR(100) NOT NULL").append("\r\n");
sql.append(")");
Matcher matcher = compile.matcher(sql);
if(matcher.find()){

}
比如说上面的情况,所用的正则USE TEST也可以获取,IS_USE字段这也可以获取,有没有什么规则只能获取UST TEST这一段
展开
 我来答
紫薇参星
科技发烧友

2017-03-21 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3573万
展开全部

在正则表达式加两个单词边界符,就不会匹配IS_USE字段了.

正则表达式 (?i)\buse\b\s+\[?\s*(\w+)\s*\]?

我给你个Java语言的例子,你看看吧.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PM{
 public static void main(String args[]){
  Pattern compile = Pattern.compile("(?i)\\buse\\b\\s+\\[?\\s*(\\w+)\\s*\\]?");
  StringBuilder sql = new StringBuilder("USE TEST").append("\r\n");
  sql.append("GO").append("\r\n");
  sql.append("CREATE TABLE TEST_TABLE(").append("\r\n");
  sql.append("IS_USE VARCHAR(100) NOT NULL").append("\r\n");
  sql.append(")");
  Matcher matcher = compile.matcher(sql);
  while(matcher.find()){
   System.out.println(matcher.group());
  }
 }
}

运行结果

USE TEST

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式