我输入了诸如 "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/