我正在尝试从Java中的MySQL插入命令中提取值。就Java而言,insert命令只是一个字符串。它的格式为
INSERT INTO employees VALUES ("John Doe", "45", "engineer");
我需要从该声明中删除'45'。我无法确定其索引,因为名称和职位名称会有所不同。我只需要年龄。除了过于复杂的字符串操作,我可能会及时发现,是否有更直接的方法来隔离这些字符?我似乎无法理解如何去做,我对正则表达式不是很熟悉。
答案 0 :(得分:2)
如果这是您的邮件的特定格式,那么这样的正则表达式应该会有所帮助:
INSERT INTO employees VALUES (".*?", "(.*?)", ".*?");
读取结果的第一组,你应该得到年龄。
在正则表达式(X)
中定义一个匹配组,用于捕获X
(其中X
可以是任何正则表达式)。这意味着如果整个正则表达式匹配,那么您可以轻松找到此匹配组中的值(在Java中使用Matcher.group()
)。
您还可以在单个正则表达式中拥有多个匹配组,如下所示:
INSERT INTO employees VALUES ("(.*?)", "(.*?)", "(.*?)");
所以你的代码看起来像这样:
String sql = "INSERT INTO employees VALUES (\"John Doe\", \"45\", \"engineer\");";
final Pattern patter = Pattern.compile("INSERT INTO employees VALUES (\"(.*?)\", \"(.*?)\", \"(.*?)\");");
final Matcher matcher = pattern.matcher(sql);
if (matcher.matches()) {
String name = matcher.group(1);
String age = matcher.group(2);
String job = matcher.group(3);
// do stuff ...
}
答案 1 :(得分:0)
假设该名称不包含任何“您可以使用正则表达式.*?".*?".*?"(\d+)".*
而组(1)为您提供年龄。
答案 2 :(得分:0)
据我所知,你的insert命令只会插入3列。您可以做的就是在字符逗号(,)上拆分字符串,然后获取数组的第二个元素,修剪左右白色空格,然后提取除第一个和最后一个字符之外的元素。这应该会把你带到年龄。为它编写一个伪代码:
String insertQuery="INSERT INTO employees VALUES (\"John Doe\", \"45\", \"engineer\")";
String splitQuery=insertQuery.split(",");
String age=splitQuery[1];
age=age.trim();
age=age.substring(1, age.length-2);
答案 3 :(得分:0)
String.split如何用“,”?
final String insert = "INSERT INTO employees VALUES (\"John Doe\", \"45\", \"engineer\"); ";
System.out.println(insert.split(",")[1].trim());
答案 4 :(得分:0)
如果您确定字符串中只有一个数字实例,那么您需要的正则表达式非常简单:
//Assuming that str contains your insert statement
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(str);
if(m.find()) System.out.println(m.group());