我有这些student_id(int)数据
20001001
20001002
20001003
20001004
20001005
我想使用正则表达式模式,其中;
我尝试使用这种正则表达式来实现我的目标;
'^[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查询方式执行此操作
答案 0 :(得分:1)
您使用方括号
定义了一个字符类"^[" + searchCriteria.trim().toUpperCase() + "]+"....
^ ^
然后在其后设置+
量词。因此,您既不会考虑订单,也不会考虑searchCriteria
字符串中的字符数。您可以将RAM
与[ARM]+
正则表达式匹配,甚至可以与RAMARM
,AMRAM
等匹配。
您可以删除[
和]+
以强制执行严格的模式匹配("确切的"字匹配):
String regex = "^" + searchCriteria.trim().toUpperCase() + "[0-9a-zA-Z]*$";