powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование regexp_substr
15 сообщений из 15, страница 1 из 1
Использование regexp_substr
    #39557615
Yuri Kazakoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, кто недавно регулярные выражения юзал, как regexp_substr заюзать, чтобы из строки:

Код: plsql
1.
ГАЗ 44_В135ТЕ_ОРБ_Ичалковский РЭС



вытянуть всё, что содержится после третьего знака подчёркивания?

Спасибо!
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557621
instr substr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
select substr('ГАЗ 44_В135ТЕ_ОРБ_Ичалковский РЭС',instr('ГАЗ 44_В135ТЕ_ОРБ_Ичалковский РЭС','_',1,3)+ 1) from dual


И нечего выдумывать сложности на ровном месте
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557624
Yuri Kazakoff,

В данной постановке задачи достаточно суперпозиции функций substr и instr . Или тут именно спортивный интерес - сделать на регулярках?
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557632
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A чем тебе SUBSTR/INSTR не угодил? С регуляркой (при условии перед/между _ не пусто):

Код: plsql
1.
select regexp_substr('ГАЗ 44_В135ТЕ_ОРБ_Ичалковский РЭС','[^_]+',1,4) from dual



В общем случае:

Код: plsql
1.
select regexp_substr('ГАЗ 44_В135ТЕ_ОРБ_Ичалковский РЭС','_([^_]*)',1,3,null,1) from dual



SY.
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557641
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
instr substrИ нечего выдумывать сложности на ровном месте

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select substr('instr substr',instr('instr substr','_',1,3)+ 1) from dual
  2  /

SUBSTR('INST
------------
instr substr

SQL> select substr('instr substr',instr('instr substr' || '___','_',1,3)+ 1) from dual
  2  /

S
-


SQL> 



SY.
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557659
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
regexp_substr

"после третьего" <> "между третьим и четвёртым"
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557684
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
with t as (
select 'ГАЗ 44_В135ТЕ_ОРБ_Ичалковский РЭС' s from dual
)
select substr(s,instr(s,'_',1,3)+ 1)      var1
      ,regexp_replace(s,'^([^_]*\_){3}')  var2
 from t;
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557695
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic"после третьего" <> "между третьим и четвёртым"

Упс. Тогда SUBSTR/INSTR. REGEXP_SUBSTR скорее всего в два приема.

SY.
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557700
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно. Через REGEXP_REPLACE, только та же ситуaция что и у instr substr:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with t as (
select 'orawish' s from dual
)
select substr(s,instr(s,'_',1,3)+ 1)      var1
      ,regexp_replace(s,'^([^_]*\_){3}')  var2
      ,regexp_replace(s || '___','^([^_]*\_){3}')  var2
 from t
/

VAR1    VAR2    V
------- ------- -
orawish orawish

SQL> 



SY.
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557725
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYТочно.
Код: plsql
1.
'_[^_]*_[^_]*_(.*)'
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557745
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  1  with t as (
  2  select 'o_r_a_w_i_s_h_' s from dual
  3  )
  4  select substr(s,instr(s,'_',1,3)+ 1)      var1
  5        ,regexp_replace(s,'^([^_]*\_){3}')  var2
  6        ,regexp_replace(s || '___','^([^_]*\_){3}')  var2
  7*  from t
SQL> /

VAR1     VAR2     VAR2
-------- -------- -----------
w_i_s_h_ w_i_s_h_ w_i_s_h____



.....
stax
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39557751
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t as (
 select 'o_r_a_w_i_s_h_' s from dual union all
 select 'orawish' s from dual union all
 select 'or_a_wish' s from dual
 )
 select s, regexp_substr(s,'_[^_]*_[^_]*_(.*)',1,1,null,1)  var2
  from t
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39562527
Yuri Kazakoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое человеческое спасибо!
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39562548
Yuri Kazakoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Согласен, но регэкспы красивее смотрятся.
...
Рейтинг: 0 / 0
Использование regexp_substr
    #39562555
Код: plsql
1.
 substr(s,instr(s,'_',1,3)+ 1)

Для учета менее трех подчеркиваний нужно обернуть instr в nullif.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование regexp_substr
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]