在 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]
- 1
或 7
[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 方言是否可以按原样使用这些表达式。
我正在为我的 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]
-1
或7
[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 方言是否可以按原样使用这些表达式。