Elasticsearch——》正则regexp

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】
    总结——》【Linux】
    总结——》【MongoDB】
    总结——》【Elasticsearch】

一、概念

参考链接:【官网】正则表达式语法

regexp (正则表达式)查询允许您使用正则表达式进行项查询。“项查询” 意味着 Elasticsearch 会将正则表达式应用于由该字段生成的项,而不是字段的原始文本。

二、语法

正则表达式查询由 regexpquery_string 查询支持。

GET <index>/_search
{
  "query": {
    "regexp": {
      "<field>": {
        "value": "<regex>",
        "flags": "ALL",
      }
    }
  }
}

三、标准操作符

标准操作符作用示例
.匹配任意字符对于字符串 “abcde”,以下正则都匹配:
ab…
a.c.e
*匹配零个或多个字符对于字符串 “aaabbb”,以下正则都匹配:
ab
abc*
.bbb.
aaabbb
?匹配零个或一个字符对于字符串 “aaabbb”,以下正则都匹配:
aaa?bbb?
aaaa?bbbb?
…?.?
aa?bb?
+匹配一个或多个字符对于字符串 “aaabbb”,以下正则都匹配:
a+b+
aa+bb+
a+.+
aa+bbb+
{}最小最大匹配次数
{5}:重复匹配5次
{2,5}:重复匹配最小2次,最多5次
{2,}:# 重复匹配最小2次
对于字符串 “aaabbb”,以下正则都匹配:
- a{3}b{3}
a{2,4}b{2,4}
a{2,}b{2,}
.{3}.{3}

对于字符串 “aaabbb”,以下正则都不匹配:
a{4}b{4}
a{4,6}b{4,6}
a{4,}b{4,}
[]匹配字符的范围(匹配方括号中的一个字符)
[abc]:a或b或c
[a-c]:a或b或c
[-abc]:-或a或b或c
[abc\-]:-或a或b或c
[^abc]:不是(a或b或c)
[^a-c]:不是(a或b或c)
[^-abc]:不是(-或a或b或c)
[^abc\-]:不是(-或a或b或c)
对于字符串 “abcb”,以下正则都匹配:
ab[cd]+
[a-d]+

对于字符串 “abcb”,以下正则都不匹配:
[^a-d]+
()分组对于字符串 “ababab”,以下正则都匹配:
(ab)+
ab(ab)+
(…)+
(ab)*
abab(ab)?
(ab){3}

对于字符串 “ababab”,以下正则都不匹配:
(…)+
ab(ab)?
(ab){1,2}

1、匹配任意字符

对于字符串 “abcde”,以下正则都匹配:

  • ab…
  • a.c.e
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"abcde"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "ab..."
    }
  }
}

2、匹配一个或多个字符

对于字符串 “aaabbb”,以下正则都匹配:

  • a+b+
  • aa+bb+
  • a+.+
  • aa+bbb+
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"aaabbb"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "aa+bbb+"
    }
  }
}

3、匹配零个或多个字符

对于字符串 “aaabbb”,以下正则都匹配:

  • ab
  • abc*
  • .bbb.
  • aaabbb
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"aaabbb"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "aaa*bbb*"
    }
  }
}

4、匹配零个或一个字符

对于字符串 “aaabbb”,以下正则都匹配:

  • aaa?bbb?
  • aaaa?bbbb?
  • …?.?
  • aa?bb?
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"aaabbb"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "aaaa?bbbb?"
    }
  }
}

5、最小最大匹配次数

正则描述
{5}重复匹配5次
{2,5}重复匹配最小2次,最多5次
{2,}重复匹配最小2次

对于字符串 “aaabbb”,以下正则都匹配:

  • a{3}b{3}
  • a{2,4}b{2,4}
  • a{2,}b{2,}
  • .{3}.{3}

对于字符串 “aaabbb”,以下正则都不匹配:

  • a{4}b{4}
  • a{4,6}b{4,6}
  • a{4,}b{4,}
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"aaabbb"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "a{2,}b{2,}"
    }
  }
}

6、分组

对于字符串 “ababab”,以下正则都匹配:

  • (ab)+
  • ab(ab)+
  • (…)+
  • (ab)*
  • abab(ab)?
  • (ab){3}

对于字符串 “ababab”,以下正则都不匹配:

  • (…)+
  • ab(ab)?
  • (ab){1,2}
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"ababab"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "(ab){1,2}"
    }
  }
}

7、匹配左侧或右侧

对于字符串 “aabb”,以下正则都匹配:

  • aabb|bbaa
  • aa(cc|bb)
  • a+b+|b+a+
  • a+(b|c)+

对于字符串 “aabb”,以下正则都不匹配:

  • aacc|bb
  • a+|b+
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"aabb"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "aa(cc|bb)"
    }
  }
}

8、匹配字符的范围

正则描述
[abc]a或b或c
[a-c]a或b或c
[-abc]-或a或b或c
[abc\-]-或a或b或c
[^abc]不是(a或b或c)
[^a-c]不是(a或b或c)
[^-abc]不是(-或a或b或c)
[^abc\-]不是(-或a或b或c)

对于字符串 “abcb”,以下正则都匹配:

  • ab[cd]+
  • [a-d]+

对于字符串 “abcb”,以下正则都不匹配:

  • [^a-d]+
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"abcd"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "[a-d]+"
    }
  }
}

四、可选操作符

flags 参数默认为 ALL

flags开启可选操作符作用示例
ALL所有
COMPLEMENT~否定对于字符串 “abcdef”,以下正则都匹配:
ab~df
ab~cf
a~(cb)def

对于字符串 “abcdef”,以下正则都不匹配:
a(bc)def<br>abcdef
INTERVAL<>匹配数值的范围对于字符串 “x80”,以下正则都匹配:
x<1-100>
x<01-100>

对于字符串 “x80”,以下正则都不匹配:
x<001-100>
INTERSECTION&匹配左侧和右侧对于字符串 “aaabbb”,以下正则都匹配:
aaa.+&.+bbb

对于字符串 “aaabbb”,以下正则都不匹配:
aaa&bbb
ANYSTRING@匹配任何整个字符串

1、否定

ab〜cd,必须满足以下条件:

  • “a” 开头
  • 跟在 “b” 后面
  • 后面是任何长度的字符串,除了 “c”
  • “d” 结束

对于字符串 “abcdef”,以下正则都匹配:

  • ab~df
  • ab~cf
  • a~(cb)def

对于字符串 “abcdef”,以下正则都不匹配:

  • a~(bc)def
  • ab~cdef
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"abcdef"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "ab~df"
    }
  }
}

2、匹配数值的范围

对于字符串 “x80”,以下正则都匹配:

  • x<1-100>
  • x<01-100>

对于字符串 “x80”,以下正则都不匹配:

  • x<001-100>
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"x80"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "x<01-100>"
    }
  }
}

3、匹配左侧和右侧

对于字符串 “aaabbb”,以下正则都匹配:

  • aaa.+&.+bbb

对于字符串 “aaabbb”,以下正则都不匹配:

  • aaa&bbb
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"aaabbb"}

GET my_index/_search
{
  "query": {
    "regexp": {
      "text": "aaa.+&.+bbb"
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值