我正在尝试从 Java 中的 MySQL 插入命令中提取值。就 Java 而言,插入命令只是一个字符串。其格式为
INSERT INTO employees VALUES ("John Doe", "45", "engineer");
我需要从该语句中删除“45”。我无法确定其索引,因为姓名和职位会有所不同。我只需要年龄。除了我可能会及时弄清楚的过于复杂的字符串操作之外,是否有更直接的方法来隔离这些字符?我似乎无法全神贯注于如何做到这一点,而且我对正则表达式也不是很熟悉。
最佳答案
如果这是您的消息的特定格式,那么像这样的正则表达式应该会有所帮助:
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 ...
}
关于java - 从Java中的字符串中提取特定但未知的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5591548/