有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在createCriteria方法中搜索包含正则表达式的字符串

我将Grails用于我的web应用程序项目。我知道createCriteria方法可以对数据库中的现有条目执行搜索。假设我有一个域“some\u domain”,其中包含一个字符串变量“domain\u string”。我想找出所有包含以“1”或“7”开头的7位或10位数字的“域_字符串”。(例如,域_string1=“……1234567……”,域2=“..7192839265…”,等)

在我的代码中:

some_domain.createCriteria().list() {
   rlike("domain_string", "%/^(1|7){7,10}/%")
}

我在这里使用了java正则表达式,grails文档告诉我rlike用于正则表达式输入。但我无法通过代码获得确切的输出,因为我不熟悉groovy语法。有什么建议吗?先谢谢你


共 (2) 个答案

  1. # 1 楼答案

    你可以用

    rlike("domain_string", /([^0-9]|^)[17][0-9]{6}([0-9]{3})?([^0-9]|$)/)
    

    regex demo

    详细信息

    • ([^0-9]|^)-非数字字符或字符串开头
    • [17]-17
    • [0-9]{6}-任意六位数字
    • ([0-9]{3})?-三位数字的可选出现
    • ([^0-9]|$)-非数字字符或字符串结尾
  2. # 2 楼答案

    java本机规则的Groovy正则表达式如下所示:

    def RE = /\D*[17]\d+\D*/
    
    def domain_strings = [ ".........1234567.......", ".......7192839265......", ".......3192839265......", , ".......4192839265......" ]
    
    domain_strings.each{
      boolean match = it ==~ RE
      println "$it matches? -> $match"
    }
    

    印刷品:

    .........1234567....... matches? -> true
    .......7192839265...... matches? -> true
    .......3192839265...... matches? -> false
    .......4192839265...... matches? -> false
    

    您应该检查您的DB SQL方言是否可以按原样使用这些表达式