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

Searching Strings containing a regex in createCriteria Method

我正在为我的 Web 应用程序项目使用 Grails。我知道 createCriteria 方法可以对数据库中的现有条目执行搜索。假设我有一个域“some_domain”,其中包含一个字符串变量“domain_string”。我想找出所有包含以“1”或“7”开头的 7 位或 10 位数字的“domain_strings”。 (例如 domain_string1 = ".......1234567.......", domain_string2 = "......7192839265...... ”等)

在我的代码中:

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

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

您可以使用

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]|$) - 非数字字符或字符串结尾。

Groovy java 本地规则的正则表达式看起来像:

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

你应该检查你的数据库 SQL 方言是否可以按原样使用这些表达式。