gpt4 book ai didi

java - 以 postgresql 的确切单词正则表达式模式开头

转载 作者:行者123 更新时间:2023-11-29 13:23:53 24 4
gpt4 key购买 nike

我有这些 student_id(int) 数据

20001001 
20001002
20001003
20001004
20001005

我想在其中使用正则表达式模式;

  1. 当使用'2000'时,将显示所有数据(开头为)
  2. 当使用'20001002'时,只显示特定数据(完全匹配)

我尝试使用这个正则表达式模式来实现我的目标;

'^[X]+[0-9a-zA-Z]*$'

其中x是一个字符串变量,它的值取决于我要显示的数据; “2000”或更具体的“20001002”

但是,我的第二个目标(精确匹配)没有得到满足,应该对我的正则表达式模式进行哪些更改才能满足我的 2 个目标?

我正在使用 Java JDBC 和 Postgresql。

public static ResultSet searchStudentQuery(Connection connection, String dbTable, String searchCriteria)
throws SQLException {

String regex = "^[" + searchCriteria.trim().toUpperCase() + "]+[0-9a-zA-Z]*$";
PreparedStatement searchStudent = connection.prepareStatement(
"SELECT * FROM " + dbTable + " WHERE CAST(student_id AS TEXT) ~ ? OR first_name ~ ? OR last_name ~ ?;");

searchStudent.setString(1, regex);
searchStudent.setString(2, regex);
searchStudent.setString(3, regex);
return searchStudent.executeQuery();

}

编辑:如果可能,我想以 postresql 查询方式执行此操作

最佳答案

你用方括号定义了一个字符类

"^[" + searchCriteria.trim().toUpperCase() + "]+"....
^ ^

然后在它后面设置一个+量词。因此,您既不考虑顺序,也不考虑 searchCriteria 字符串中的字符数。您可以将 RAM[ARM]+ 正则表达式匹配,甚至可以将 RAMARMAMRAM 等匹配。

您可以只删除 []+ 以强制执行严格的模式匹配(“精确”单词匹配):

String regex = "^" + searchCriteria.trim().toUpperCase() + "[0-9a-zA-Z]*$";

关于java - 以 postgresql 的确切单词正则表达式模式开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37267962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com