【问题标题】:Check for a presence of word in string by Oracle REGEXP_SUBSTR通过 Oracle REGEXP_SUBSTR 检查字符串中是否存在单词
【发布时间】:2018-09-21 18:04:16
【问题描述】:

我尝试通过正则表达式 '\b<word>\b' 检查字符串中是否存在特定单词,但似乎 \b 锚点在 REGEXP_SUBSTR 中不起作用:

例如检查单词ABC:

SELECT  REGEXP_SUBSTR ('A, AB, ABC,ABCD', '\bABC\b') FROM DUAL;

但这里的结果是 (null)。我做错了什么?

【问题讨论】:

  • 你想用\b做什么?是否只需要获取ABC,不包括例如xABCABCyxABCY
  • 是的,我想检查整个单词 - 在我的情况下,检查单词 'ABC',而不是字符串 'ABC' 作为单词 'ABCD' 的一部分。
  • Oracle 正则表达式不支持\b 构造。您需要使用(^|[^[:alnum:]_])word($|[^[:alnum:]_])(^|\W)word($|\W)

标签: regex oracle regexp-substr


【解决方案1】:

要准确地检查字符串是否包含给定的单词,并假设字符串中唯一可以分隔两个单词的字符是逗号和空格,您需要做的就是处理这两个字符,即使考虑字符串的开头和结尾:

SELECT 1 from dual
where REGEXP_LIKE ('A, AB, ABC,ABCD', '(^| |,)ABC(,|$| )')

它是如何工作的:

(^| |,) 表示单词前面可以不加任何内容(字符串的开头)、逗号或空格;

类似(,|$| ) 表示单词后面可以跟逗号、空字符(字符串的结尾)或空格

【讨论】:

  • 谢谢,它有效!但是为什么我不能使用\b锚来匹配一个单词边界位置:\bABC\b
猜你喜欢
  • 2011-07-16
  • 2017-02-28
  • 1970-01-01
  • 2022-11-24
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2014-08-09
相关资源
最近更新 更多