Oracle regexp_substr - как извлечь текст, исключая символы маркера - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть строка в этом формате

Transaction 'pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)' failed due to connection error

Мне нужно извлечь текст между 'и (.

pqr_111_xyz_222 в этом примере.

Theследующий запрос возвращает 'pqr_111_xyz_222 (

select regexp_substr('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '''.+\(') from dual;

Как мне изменить регулярное выражение (или использовать любой другой метод, который может быть включен в этот единственный запрос), чтобы маркеры и (исключались)и я получаю только pqr_111_xyz_222 ?

Ответы [ 4 ]

4 голосов
/ 02 декабря 2011

Вы можете использовать REGEXP_REPLACE вместо:

regexp_replace('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '.*''(.+)\(.*', '\1')
2 голосов
/ 08 августа 2012
select regexp_substr('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '\w+',1,2) from dual;
1 голос
/ 05 декабря 2011

Эта книга является достойным источником, если вы хотите углубиться в использование обратных ссылок (требуется в опции regexp_replace) http://www.amazon.com/Regular-Expressions-Reference-OReilly-ebook/dp/B0026OR38A/ref=sr_1_4?ie=UTF8&qid=1323109619&sr=8-4

1 голос
/ 02 декабря 2011

Вы можете окружить вызов функции substr и instr, чтобы удалить первый и последний символы результата.Недостатком является то, что я думаю, что вам потребуется дополнительный вызов regexp_substr, чтобы получить длину результата для передачи в substr / instr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...