<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Regexp Query(正則表達式查詢) 原文鏈接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html) 譯文鏈接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260873](http://www.apache.wiki/pages/viewpage.action?pageId=4260873) 貢獻者 : @小布丁 ?**regexp** (正則表達式)查詢允許您使用正則表達式進行**項查詢**。有關支持的正則表達式語言的詳細信息,請參閱[正則表達式語法](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax)。第一個句子中的 “項查詢” 意味著 **Elasticsearch** 會將正則表達式應用于由該字段生成的項,而不是字段的原始文本。 注意:?**regexp**?(正則表達式)查詢的性能很大程度上取決于所選的正則表達式。匹配一切像?**“.*”**?,是非常慢的,使用回顧正則表達式也是如此。如果可能,您應該嘗試在正則表達式開始之前使用長前綴。通配符匹配器**“.*?+”**?將主要降低性能。 ``` GET /_search { "query": { "regexp":{ "name.first": "s.*y" } } } ``` 還支持 boost? ``` GET /_search { "query": { "regexp":{ "name.first":{ "value":"s.*y", "boost":1.2 } } } } ``` 您還可以使用特殊標志 ``` GET /_search { "query": { "regexp":{ "name.first": { "value": "s.*y", "flags" : "INTERSECTION|COMPLEMENT|EMPTY" } } } } ``` 特殊標志可以是 **ALL** (默認)、**ANYSTRING**、**COMPLEMENT**、**EMPTY**、**INTERSECTION**、**INTERVAL** 以及 **NONE?**。請檢查 [**Lucene** 文檔](http://lucene.apache.org/core/4_9_0/core/org/apache/lucene/util/automaton/RegExp.html)的其他含義。 正則表達式是危險的,因為很容易意外地創建一個無害的、需要指數數量的內部確定的自動機狀態(以及相應的 **RAM** 和 **CPU** )為 **Lucene** 執行。 ?**Lucene** 使用 _max_determinized_states_ 設置(默認為10000)阻止這些操作。您可以提高此限制以允許執行更復雜的正則表達式。 ``` GET /_search { "query": { "regexp":{ "name.first": { "value": "s.*y", "flags" : "INTERSECTION|COMPLEMENT|EMPTY", "max_determinized_states": 20000 } } } } ``` ## 正則表達式語法 正則表達式查詢由 **regexp** 和 **query_string** 查詢支持。 **Lucene** 正則表達式引擎不?**Perl-**兼容?,但支持較小范圍的運算符。 注意:我們不會嘗試解釋正則表達式,而只是解釋支持的運算符。 ### 標準操作符 #### 錨定 大多數正則表達式引擎允許您匹配字符串的任何部分。如果你希望正則表達式模式從字符串的開頭開始或者在字符串的結尾處結束,那么你必須具體地錨定它,使用 **“^”** 表示開頭或使用 **“$”** 表示結束。 ?**Lucene** 的模式總是錨定的。提供的模式必須匹配整個字符串。對于字符串 _“abcde”_ : ``` ab.* # 匹配 abcd # 不匹配 ``` #### 允許的字符 任何?**Unicode**?字符都可以在模式中使用,但某些字符是保留的,必須進行轉義。標準保留字符為: ``` . ? + * | { } [ ] ( ) " \ ``` 如果啟用可選功能(見下文),則還可以保留這些字符: ``` # @ & < > ~ ``` 任何保留字符都可以使用反斜杠?_“\ *”_?轉義,其中包括一個字面反斜杠字符:_“\\”_ 此外,任何字符(雙引號除外)在用雙引號括起時,將被逐字解釋: ``` john"@smith.com" ``` #### 匹配任意字符 字符 **”.”** 可以用來表示任何字符。對于字符串 _“abcde”?_: ``` ab... # 匹配 a.c.e # 匹配 ``` #### 匹配一個或多個 加號 **“+”** 可以用于重復小先前模型一次或多次。對于字符串 _“aaabbb”?_: ``` a+b+ # 匹配 aa+bb+ # 匹配 a+.+ # 匹配 aa+bbb+ # 匹配 ``` #### 匹配零個或多個 星號**“*”**?可以用于匹配小先前模型零次或多次。對于字符串?_“aaabbb”_?: ``` a*b* # 匹配 a*b*c* # 匹配 .*bbb.* # 匹配 aaa*bbb* # 匹配 ``` #### 匹配零個或一個 問號 **“?”** 使得先前模型是可選的。它匹配零或一次。對于字符串 _“aaabbb”_ : ``` aaa?bbb? # 匹配 aaaa?bbbb? # 匹配 .....?.? # 匹配 aa?bb? # 不匹配 ``` #### 最小最大匹配次數 大括號 **“{}”** 可以用于指定前一先前模型可以重復的最小和最大(可選)次數。允許的形式是: ``` {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} # 匹配 a{4}b{4} # 不匹配 a{4,6}b{4,6} # 不匹配 a{4,}b{4,} # 不匹配 ``` #### 分組 括號 **“()”** 可以用于形成子模型。上面列出的數量運算符以最短的先前模型操作,它可以是一個組。對于字符串 _“ababab”?_: ``` (ab)+ # 匹配 ab(ab)+ # 匹配 (..)+ # 匹配 (...)+ # 不匹配 (ab)* # 匹配 abab(ab)? # 匹配 ab(ab)? # 不匹配 (ab){3} # 匹配 (ab){1,2} # 不匹配 ``` #### 交替 管道符號 **“|”** 作為 **OR** 運算符。如果左側或右側的模式匹配,匹配將成功。交替適用于 **longest pattern** (最長的模型),而不是最短的。對于字符串 _“aabb”?_: ``` aabb|bbaa # 匹配 aacc|bb # 不匹配 aa(cc|bb) # 匹配 a+|b+ # 不匹配 a+b+|b+a+ # 匹配 a+(b|c)+ # 匹配 ``` #### 字符類 潛在字符的范圍可以通過將它們包圍在方括號 **“[]”** 中來表示為字符類。前導 **“^”** 排除字符類。允許的形式是: ``` [abc] # 'a' or 'b' or 'c' [a-c] # 'a' or 'b' or 'c' [-abc] # '-' or 'a' or 'b' or 'c' [abc\-] # '-' or 'a' or 'b' or 'c' [^abc] # any character except 'a' or 'b' or 'c' [^a-c] # any character except 'a' or 'b' or 'c' [^-abc] # any character except '-' or 'a' or 'b' or 'c' [^abc\-] # any character except '-' or 'a' or 'b' or 'c' ``` 請注意,破折號“ - ”表示一個字符范圍,除非它是第一個字符或者使用反斜杠轉義。 例如字符串 "abcd": ab[cd]+ # 匹配 [a-d]+ # 匹配 [^a-d]+ # 不匹配 ### 可選運算符 默認情況下,這些運算符可用,因為 _flags_ 參數默認為 **ALL** 。不同的標志組合(用 **_“|”_?**連接)可用于 **啟用/禁用** 特定的運算符: ``` { "regexp": { "username": { "value": "john~athon<1-5>", "flags": "COMPLEMENT|INTERVAL" } } } ``` #### ?Complement (補集) 補充可能是最有用的選擇。跟隨波浪 **“?”?**的最短模型是無效的。例如 _“ab?cd”?_表示: * 以 _"a"_ 開頭。 * 跟在 _"b"_ 后面。 * 后面是任何長度的字符串,除了 _"c"_ 。 * 以 _“d”_ 結束。 例如字符串 _“abcdef”_ : ``` ab~df # 匹配 ab~cf # 匹配 ab~cdef # 不匹配 a~(cb)def # 匹配 a~(bc)def # 不匹配 ``` 啟用 COMPLEMENT 或 ALL 標志。 #### ?Interval (間隔) **interval** 選項允許使用由尖括號 **“&lt;&gt;”** 括起來的數字范圍。對于字符串?_“foo80”?_: ``` foo<1-100> # 匹配 foo<01-100> # 匹配 foo<001-100> # 不匹配 ``` 啟用 INTERVAL 或 ALL 標志。 #### ?Intersection (交集) 符號 **“&”** 連接兩個模式,必須同時匹配這兩個模式。對于字符串 _“aaabbb”?_: ``` aaa.+&.+bbb # 匹配 aaa&bbb # 不匹配 ``` 使用此功能通常意味著您應該重寫正則表達式。 啟用?**INTERSECTION** 或 **ALL** 標志。 #### Any string (任意字符串) 符號 **“@”** 匹配整個字符串。這可以與上面的交集和補集結合來表達 _“除外的一切”_ 。例如: ``` @&~(foo.+) # 除了開頭的 "foo" 以外的任意字符串。 ``` 啟用 **ANYSTRING?**或?**ALL**?標志。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看