从给定模式中提取双引号字符串

时间:2012-02-17 14:15:35

标签: oracle plsql

请任何人帮助我,

我有一个像

这样的字符串

varchar2 b:

'i hav to extract second double queted string "string one".and the "Second one"'

预期结果:第二个

varchar2 a:

' here is "table". "tiger" some other txt ';

预期结果为 tiger

从上面的字符串模式我必须提取第二个双引号字符串accurence。在这方面请帮助我,我尝试了很多尝试

3 个答案:

答案 0 :(得分:3)

您可以使用REGEXP_REPLACE

WITH t AS (
   SELECT 'i hav to extract second double queted string "string one".and the "Second one"'  as x FROM dual
   UNION
   SELECT ' here is "table". "tiger" some other txt ' as x FROM dual)
SELECT x,
       REGEXP_REPLACE(x, '^.*".*".*(".*").*$', '\1')
  FROM t;

返回:

"tiger"
"Second one"

希望它有所帮助...

如果您不想使用引号,请使用:

REGEXP_REPLACE(x, '^.*".*".*"(.*)".*$', '\1')

答案 1 :(得分:3)

使用instr()获取字符索引(以及要获取的出现位置)和substr()获取字符串子字符串的示例:

select 
    substr(str,
        instr(str, '"', 1,3)+1, 
        instr(str, '"', 1, 4)- instr(str, '"', 1,3)-1)
from
   (select 'here is "table". "tiger" some other txt' str from dual) strt;

substr instr(str, '"',1,3)使用instr(str, '"', 1, 4)来获得第三次出现'。'然后使用{{1}}来获得第四次出现,但我们必须减去第三次''的位置'因为这个参数是要子串的文本的大小(即我们的情况下引号之间的文本)。

你可以改进第四次出现,因为它再次从位置1开始搜索,而不是第3位。

答案 2 :(得分:2)

在11g中,您可以将regexp_substr与新参数一起使用(允许仅匹配子表达式):

SQL> with data as (
  2    select 'i hav to [...] "string one".and the "Second one"' txt from dual
  3    union all
  4    select ' here is "table". "tiger" some other txt ' from dual)
  5  SELECT regexp_substr(txt,'"([^"]*)"', 1, 2, '', 1) FROM data;

REGEXP_SUBSTR(TXT,'"([^"]*)"',1,2,'',1)
------------------------------------------------------------------------------
Second one
tiger

在10g中,您可以使用replace删除额外的"

SQL> with data as (
  2    select 'i hav to [...] "string one".and the "Second one"' txt from dual
  3    union all
  4    select ' here is "table". "tiger" some other txt ' from dual)
  5  SELECT replace(regexp_substr(txt,'"[^"]*"', 1, 2),
  6                 '"', '')
  7    FROM data;

REPLACE(REGEXP_SUBSTR(TXT,'"[^"]*"',1,2),'"','')
------------------------------------------------
Second one
tiger