Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Oracle REGEXP_INSTR查找精确单词_Regex_Oracle - Fatal编程技术网

使用Oracle REGEXP_INSTR查找精确单词

使用Oracle REGEXP_INSTR查找精确单词,regex,oracle,Regex,Oracle,我想使用REGEXP\u INSTR从字符串返回以下位置 我正在寻找单词car,它在以下字符串中精确匹配 car,care,oscar - 1 care,car,oscar - 6 oscar,care,car - 12 差不多 SELECT REGEXP_INSTR('car,care,oscar', 'car', 1, 1) "REGEXP_INSTR" FROM DUAL; 我不确定要使用哪种类型的转义运算符。以下查询处理所有情况。如果字符串以car、开头,或者整个字符串只是car,则

我想使用
REGEXP\u INSTR
从字符串返回以下位置

我正在寻找单词car,它在以下字符串中精确匹配

car,care,oscar - 1
care,car,oscar - 6
oscar,care,car - 12
差不多

SELECT REGEXP_INSTR('car,care,oscar', 'car', 1, 1) "REGEXP_INSTR" FROM DUAL;

我不确定要使用哪种类型的转义运算符。

以下查询处理所有情况。如果字符串以
car、
开头,或者整个字符串只是
car
,则返回起始位置。如果找到
,car,
,或者字符串以
,car
结尾,则返回起始位置+1,以说明逗号

SELECT 
  CASE
    WHEN REGEXP_LIKE('car,care,oscar', '^car,|^car$') THEN REGEXP_INSTR('car,care,oscar', '^car,|^car$', 1, 1)
    WHEN REGEXP_LIKE('car,care,oscar', ',car,|,car$') THEN REGEXP_INSTR('car,care,oscar', ',car,|,car$', 1, 1)+1
    ELSE 0
  END  "REGEXP_INSTR"
FROM DUAL;

有了各种可能性

一个更简单的解决方案是用逗号包围源字符串和搜索字符串,并使用INSTR查找位置

SELECT INSTR(',' || 'car,care,oscar' || ',', ',car,') "INSTR" FROM DUAL;
例如:


我喜欢诺尔的回答,因为它表现得非常好!另一种方法是从字符分隔的字符串中创建单独的行: pm.nodes='a;BCDEFg'

(select regexp_substr(pm.nodes,'[^;]+', 1, level) 
   from dual 
connect by regexp_substr(pm.nodes, '[^;]+', 1, level) is not null)
(select regexp_substr(pm.nodes,'[^;]+', 1, level) 
   from dual 
connect by regexp_substr(pm.nodes, '[^;]+', 1, level) is not null)