java - 需要正则表达式方面的帮助

标签 java regex

我输入了诸如 "Varchar(10)Number(10)datetime(8)varchar(17) )char(3) 一次一个。

我只需要从中提取文本。我怎样才能用Java做到这一点?

假设我输入了 Varchar(50) 并期望输出 Varchar

我尝试了这个,但没有成功:

String line = "varchar(0)";
String pattern = "\\D{.*}";
// Create a Pattern object 
Pattern r = Pattern.compile(pattern);
// Now create matcher object. 
Matcher m = r.matcher(line); 
if (m.find( )) { 
  System.out.println("Found value: " + m.group(0) ); 
} else { 
  System.out.println("NO MATCH"); 
} 

最佳答案

您的组正则表达式很一般

\w+\(\d+\)

要捕获第一部分,您可以将其分组

(\w+)\(\d+\)

试试这个功能:

private final Pattern TYPE_REGEX = Pattern.compile("(\\w+)\\(\\d+\\)");

public String extractType(String item) {
  Matcher matcher = TYPE_REGEX.matcher(item.trim());
  if(!matcher.matches())
    return null;
  return matcher.group(1);
}

免费赠品:

您还可以使用类型安全枚举作为返回类型,因为我认为您正在处理一组固定的数据库类型

private enum Type { VARCHAR, NUMBER, DATETIME, CHAR, ADD_ALL_OTHERS_THAT_APPLY }
private final Pattern TYPE_REGEX = Pattern.compile("(\\w+)\\(\\d+\\)");

public Type extractType(String item) {
  Matcher matcher = TYPE_REGEX.matcher(item.trim());
  if(!matcher.matches())
    return null;
  return Type.valueOf(matcher.group(1).toUpperCase());
}

关于java - 需要正则表达式方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725769/

相关文章:

java - 使用 hibernate-search 在嵌入式实体中实现多个约束

java - 在 Java 11 中使用流返回树形图

java - JSON 将数据库解析为字符串

php - 找不到标记之间的正则表达式文本

Python 使用正则表达式替换

java - 使用 java 从现有 WSDL 文件构建 Web 服务客户端

java - 传递多维数组

javascript - 在 JavaScript 中,如何在不影响标签的情况下替换 HTML 页面中的文本?

javascript - 在 Javascript 中使用 Regex 返回单词数组

java - 引用中的编译模式引用