Elasticsearch——》正则regexp 冷不防 2024-03-22 14:43 32阅读 0赞 > 推荐链接: > [总结——》【Java】][Java] > [总结——》【Mysql】][Mysql] > [总结——》【Redis】][Redis] > [总结——》【Kafka】][Kafka] > [总结——》【Spring】][Spring] > [总结——》【SpringBoot】][SpringBoot] > [总结——》【MyBatis、MyBatis-Plus】][MyBatis_MyBatis-Plus] > [总结——》【Linux】][Linux] > [总结——》【MongoDB】][MongoDB] > [总结——》【Elasticsearch】][Elasticsearch] #### Elasticsearch——》正则regexp #### * 一、概念 * 二、语法 * 三、标准操作符 * * 1、匹配任意字符 * 2、匹配一个或多个字符 * 3、匹配零个或多个字符 * 4、匹配零个或一个字符 * 5、最小最大匹配次数 * 6、分组 * 7、匹配左侧或右侧 * 8、匹配字符的范围 * 四、可选操作符 * * 1、否定 * 2、匹配数值的范围 * 3、匹配左侧和右侧 ## 一、概念 ## > 参考链接:[【官网】正则表达式语法][Link 1] **regexp** (正则表达式)查询允许您使用正则表达式进行**项查询**。“项查询” 意味着 **Elasticsearch** 会将正则表达式应用于由该字段生成的项,而不是字段的原始文本。 ## 二、语法 ## 正则表达式查询由 **regexp** 和 **query\_string** 查询支持。 GET <index>/_search { "query": { "regexp": { "<field>": { "value": "<regex>", "flags": "ALL", } } } } ## 三、标准操作符 ## <table> <thead> <tr> <th><strong>标准操作符</strong></th> <th align="left"><strong>作用</strong></th> <th align="left"><strong>示例</strong></th> </tr> </thead> <tbody> <tr> <td>.</td> <td align="left">匹配任意字符</td> <td align="left">对于字符串 “abcde”,以下正则都匹配:<br>ab… <br>a.c.e</td> </tr> <tr> <td>*</td> <td align="left">匹配零个或多个字符</td> <td align="left">对于字符串 “aaabbb”,以下正则都匹配:<br>a<em>b</em><br>a<em>b</em>c*<br>.<em>bbb.</em><br>aaa<em>bbb</em></td> </tr> <tr> <td>?</td> <td align="left">匹配零个或一个字符</td> <td align="left">对于字符串 “aaabbb”,以下正则都匹配:<br>aaa?bbb?<br>aaaa?bbbb?<br>…?.?<br>aa?bb?</td> </tr> <tr> <td>+</td> <td align="left">匹配一个或多个字符</td> <td align="left">对于字符串 “aaabbb”,以下正则都匹配:<br>a+b+<br>aa+bb+<br>a+.+<br>aa+bbb+<br></td> </tr> <tr> <td>{}</td> <td align="left">最小最大匹配次数<br>{5}:重复匹配5次<br>{2,5}:重复匹配最小2次,最多5次<br>{2,}:# 重复匹配最小2次</td> <td align="left">对于字符串 “aaabbb”,以下正则都匹配:<br>- a{3}b{3}<br>a{2,4}b{2,4}<br>a{2,}b{2,}<br>.{3}.{3}<br><br>对于字符串 “aaabbb”,以下正则都不匹配:<br>a{4}b{4}<br>a{4,6}b{4,6}<br>a{4,}b{4,}</td> </tr> <tr> <td>[]</td> <td align="left">匹配字符的范围(匹配方括号中的一个字符)<br>[abc]:a或b或c<br>[a-c]:a或b或c<br>[-abc]:-或a或b或c<br>[abc\-]:-或a或b或c<br>[^abc]:不是(a或b或c)<br>[^a-c]:不是(a或b或c)<br>[^-abc]:不是(-或a或b或c)<br>[^abc\-]:不是(-或a或b或c)</td> <td align="left">对于字符串 “abcb”,以下正则都匹配:<br>ab[cd]+<br>[a-d]+<br><br>对于字符串 “abcb”,以下正则都不匹配:<br> [^a-d]+</td> </tr> <tr> <td>()</td> <td align="left">分组</td> <td align="left">对于字符串 “ababab”,以下正则都匹配:<br>(ab)+<br>ab(ab)+<br>(…)+<br>(ab)*<br>abab(ab)?<br>(ab){3}<br><br>对于字符串 “ababab”,以下正则都不匹配:<br>(…)+<br>ab(ab)?<br>(ab){1,2}</td> </tr> </tbody> </table> ### 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”,以下正则都匹配: * a*b* * a*b*c\* * .*bbb.* * aaa*bbb* 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、最小最大匹配次数 ### <table> <thead> <tr> <th><strong>正则</strong></th> <th align="left"><strong>描述</strong></th> </tr> </thead> <tbody> <tr> <td>{5}</td> <td align="left">重复匹配5次</td> </tr> <tr> <td>{2,5}</td> <td align="left">重复匹配最小2次,最多5次</td> </tr> <tr> <td>{2,}</td> <td align="left">重复匹配最小2次</td> </tr> </tbody> </table> 对于字符串 “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、匹配字符的范围 ### <table> <thead> <tr> <th><strong>正则</strong></th> <th align="left"><strong>描述</strong></th> </tr> </thead> <tbody> <tr> <td>[abc]</td> <td align="left">a或b或c</td> </tr> <tr> <td>[a-c]</td> <td align="left">a或b或c</td> </tr> <tr> <td>[-abc]</td> <td align="left">-或a或b或c</td> </tr> <tr> <td>[abc\-]</td> <td align="left">-或a或b或c</td> </tr> <tr> <td>[^abc]</td> <td align="left">不是(a或b或c)</td> </tr> <tr> <td>[^a-c]</td> <td align="left">不是(a或b或c)</td> </tr> <tr> <td>[^-abc]</td> <td align="left">不是(-或a或b或c)</td> </tr> <tr> <td>[^abc\-]</td> <td align="left">不是(-或a或b或c)</td> </tr> </tbody> </table> 对于字符串 “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** <table> <thead> <tr> <th>flags</th> <th>开启可选操作符</th> <th>作用</th> <th align="left">示例</th> </tr> </thead> <tbody> <tr> <td>ALL</td> <td>所有</td> <td></td> <td align="left"></td> </tr> <tr> <td>COMPLEMENT</td> <td>~</td> <td>否定</td> <td align="left">对于字符串 “abcdef”,以下正则都匹配:<br>ab~df<br>ab~cf<br>a~(cb)def<br><br>对于字符串 “abcdef”,以下正则都不匹配:<br>a<sub>(bc)def<br>ab</sub>cdef</td> </tr> <tr> <td>INTERVAL</td> <td><></td> <td>匹配数值的范围</td> <td align="left">对于字符串 “x80”,以下正则都匹配:<br>x<1-100><br>x<01-100><br><br>对于字符串 “x80”,以下正则都不匹配:<br>x<001-100></td> </tr> <tr> <td>INTERSECTION</td> <td>&</td> <td>匹配左侧和右侧</td> <td align="left">对于字符串 “aaabbb”,以下正则都匹配:<br>aaa.+&.+bbb<br><br>对于字符串 “aaabbb”,以下正则都不匹配:<br>aaa&bbb</td> </tr> <tr> <td>ANYSTRING</td> <td>@</td> <td>匹配任何整个字符串</td> <td align="left"></td> </tr> </tbody> </table> ### 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" } } } [Java]: https://blog.csdn.net/weixin_43453386/article/details/84788317 [Mysql]: https://blog.csdn.net/weixin_43453386/article/details/88667709 [Redis]: https://blog.csdn.net/weixin_43453386/article/details/127966762 [Kafka]: https://blog.csdn.net/weixin_43453386/article/details/128189472 [Spring]: https://blog.csdn.net/weixin_43453386/article/details/124900806 [SpringBoot]: https://blog.csdn.net/weixin_43453386/article/details/84788714 [MyBatis_MyBatis-Plus]: https://blog.csdn.net/weixin_43453386/article/details/84788053 [Linux]: https://blog.csdn.net/weixin_43453386/article/details/89241912 [MongoDB]: https://blog.csdn.net/weixin_43453386/article/details/84788450 [Elasticsearch]: https://blog.csdn.net/weixin_43453386/article/details/108583782 [Link 1]: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax
还没有评论,来说两句吧...