推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Kafka】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
总结——》【Linux】
总结——》【MongoDB】
总结——》【Elasticsearch】
一、概念
参考链接:【官网】正则表达式语法
regexp (正则表达式)查询允许您使用正则表达式进行项查询。“项查询” 意味着 Elasticsearch 会将正则表达式应用于由该字段生成的项,而不是字段的原始文本。
二、语法
正则表达式查询由 regexp 和 query_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”,以下正则都不匹配:文章来源地址https://www.toymoban.com/news/detail-496003.html
- 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”,以下正则都匹配:文章来源:https://www.toymoban.com/news/detail-496003.html
- aaa.+&.+bbb
对于字符串 “aaabbb”,以下正则都不匹配:
- aaa&bbb
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"text":"aaabbb"}
GET my_index/_search
{
"query": {
"regexp": {
"text": "aaa.+&.+bbb"
}
}
}
到了这里,关于Elasticsearch——》正则regexp的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!