请任何人帮助我,
我有一个像
这样的字符串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。在这方面请帮助我,我尝试了很多尝试
答案 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