网站备案号在哪本地网站搭建教程
推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Kafka】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
总结——》【Linux】
总结——》【MongoDB】
总结——》【Elasticsearch】
Elasticsearch——》正则regexp
- 一、概念
 - 二、语法
 - 三、标准操作符
 - 1、匹配任意字符
 - 2、匹配一个或多个字符
 - 3、匹配零个或多个字符
 - 4、匹配零个或一个字符
 - 5、最小最大匹配次数
 - 6、分组
 - 7、匹配左侧或右侧
 - 8、匹配字符的范围
 
- 四、可选操作符
 - 1、否定
 - 2、匹配数值的范围
 - 3、匹配左侧和右侧
 
一、概念
参考链接:【官网】正则表达式语法
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”,以下正则都不匹配:
- 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"}}
}