【问题标题】:REGEXP_LIKE search for multiple words ignoring orderREGEXP_LIKE 搜索多个单词忽略顺序
【发布时间】:2021-03-14 05:31:58
【问题描述】:

我需要在字符串中搜索,更多的单词以任意顺序搜索。

例如,需要一个正则表达式来匹配两行,使用单词“搜索”和“文本”

search in this text
in this text search

我使用经典的正则表达式:

(?=.*\bsearch\b)(?=.*\btext\b).*

但是regexp_like 不支持\b。

我知道我可以使用带有多个条件的选择

select * from table
where string like '%search%'
and string like '%text%'

但如果有 regexp_like 的解决方案,我更喜欢。

问候, 马可

【问题讨论】:

    标签: oracle regexp-like


    【解决方案1】:

    您可以使用| 匹配REGEXP_LIKE 中的多个模式,如下所示:

    SQL> -- Sample data
    SQL> WITH DATAA (STR) AS
      2  (
      3  SELECT 'search in this text' FROM DUAL UNION ALL -- will pass REGEXP
      4  SELECT 'in this text search' FROM DUAL UNION ALL -- will pass REGEXP
      5  SELECT 'in this text' FROM DUAL UNION ALL -- will not pass REGEXP
      6  SELECT 'in this search' FROM DUAL -- will not pass REGEXP
      7  )
      8  -- your query
      9  SELECT STR
     10    FROM DATAA
     11   WHERE REGEXP_LIKE ( STR, '(search)(.)*(text)|(text)(.)*(search)' );
    
    STR
    -------------------
    search in this text
    in this text search
    
    SQL>
    

    【讨论】:

    • 谢谢,这对两个词很有用,但是如果词多,我应该写出所有可能的组合
    • 这将在research 中找到search
    【解决方案2】:

    在您的列上创建一个 Oracle Text 索引:

    CREATE INDEX table_name__value__textidx ON table_name(value) INDEXTYPE IS CTXSYS.CONTEXT;
    

    那么你可以使用:

    select *
    from   table_name
    where  CONTAINS( value, '$search AND text', 1 ) > 0;
    

    这将在value 列中搜索带有search 词干的词(即searchsearchessearching),如词条上的$ 前缀和确切词所示text.

    所以,对于样本数据:

    CREATE TABLE table_name ( value ) AS
    SELECT 'search in this text' FROM DUAL UNION ALL
    SELECT '"in this text, you should search" said Yoda' FROM DUAL UNION ALL
    SELECT 'searching text is hard' FROM DUAL UNION ALL
    SELECT 'we do not want to find text research' FROM DUAL
    

    查询将输出:

    |价值 | | :-------------------------------------------- | |在此文本中搜索 | | “在这篇文章中,你应该搜索”尤达说 | |搜索文本很难 |

    db小提琴here

    【讨论】:

      猜你喜欢
      • 2019-06-09
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多