暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 正则表达式问题

askTom 2018-07-03
251

问题描述

嗨,
我试图在结果集中突出显示一个搜索词,以供网页使用。
到目前为止,我可以突出显示整个结果,但不仅仅是匹配一词。
问题在于列数据和输入的搜索词之间的空白不匹配。
(web服务器驱动程序显然不支持case或与。)
我觉得可能有一种方法可以用正则表达式来做到这一点,但我不知道如何。

简单的例子:
SQL> select rec,
  2         decode(nvl(regexp_count(replace(rec, ' ', ''), search_term, 1, 'x'), 0),
  3                0, rec,
  4                ''||rec||'') result
  5    from (select replace('NW  26', ' ', '') search_term from dual),
  6         (select '2704 NW 26TH STREET' rec from dual
  7          union all
  8          select '2704 NW26TH STREET' rec from dual
  9          union all
 10          select '2704 NW 27TH STREET' rec from dual
 11          ) info
 12   where replace(rec, ' ', '') like '%'||search_term||'%'
 13         /

REC                 RESULT
------------------- --------------------------------
2704 NW 26TH STREET 2704 NW 26TH STREET
2704 NW26TH STREET  2704 NW26TH STREET
复制


我的首选结果
REC                 PREFERED RESULT
------------------- --------------------------------
2704 NW 26TH STREET 2704 NW 26TH STREET
2704 NW26TH STREET  2704 NW26TH STREET
复制


tia

专家解答

也许吧?

您可以使用regexp_replace的最终参数忽略空格。将此设置为 'x' 来执行此操作。

但这只会忽略你模式中的空白。所以如果你得到 “NW 26”,“NW26” 在你的来源匹配。但不是 “NW 26”:

select rec,
       search_term,
       regexp_replace ( 
         rec , '(' || search_term || ')', '\1', 1, 1, 'x'
       ) res
from (
  select 'NW  26' search_term from dual
), (
  select '2704 NW 26TH STREET' rec from dual
  union all
  select '2704 NW26TH STREET' rec from dual
  union all
  select '2704 NW 27TH STREET' rec from dual
) info;

REC                   SEARCH_TERM   RES                               
2704 NW 26TH STREET   NW  26        2704 NW 26TH STREET               
2704 NW26TH STREET    NW  26        2704 NW26TH STREET   
2704 NW 27TH STREET   NW  26        2704 NW 27TH STREET
复制


因此,如果您可以找到一种安全的方法来删除数据中不需要的空格,那么在这里就可以了。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论