Извлечение строки в двойных кавычках из заданного шаблона - PullRequest
1 голос
/ 17 февраля 2012

Пожалуйста, помогите мне,

У меня есть строка типа

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 ';

ожидаемый результат - тигр

из приведенных выше строковых шаблонов. Мне нужно извлечь вторую двойную кавычку строки.Пожалуйста, помогите мне в этом отношении я попытался много попыток

Ответы [ 3 ]

3 голосов
/ 17 февраля 2012

Вы можете использовать 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')
3 голосов
/ 17 февраля 2012

Пример использования 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, а не с позиции 3.

2 голосов
/ 17 февраля 2012

В 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

В 10 г вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...