powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / regexp_substr выбрать все символы между двумя метками
8 сообщений из 8, страница 1 из 1
regexp_substr выбрать все символы между двумя метками
    #39447966
Evgeny2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, помогите пожалуйста, написать ругулярное выражение.
Имеется строка такого содержания:
Код: plsql
1.
st = 'Str1:    1d2fg    \\nStr2:    456\7hh/h345     \\nStr3:    456dddjjj66    \\n \\n \\n';



Нужно взять всё что есть между Str2: и первой всретившейся комбинацией \\n после Str2.
Я полагаю мне нужно написать что-то в духе:
Код: plsql
1.
regexp_substr(st,'(Str2:)(.*)(?=\\\\n)',1,1,'',2)


- но не работает.
т.е делаем несколько групп в первую группу берем Str2:, во вторую всё пока не сработает вперед смотрящее условие наличие комбинации \\n/ Причем каждый \ экранируем получается \\\\n
Нужно вывести всё из второй группы, т.е
Код: plsql
1.
'    456\7hh/h345     '



Так работает, только выводятся не нужные символы \\n, а их не должно быть.
Код: plsql
1.
regexp_substr(st,'(Str2:)(.*?=\\\\n)',1,1,'',2)
...
Рейтинг: 0 / 0
regexp_substr выбрать все символы между двумя метками
    #39447976
ORA__SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny2Нужно взять всё что есть между Str2: и первой всретившейся комбинацией \\n после Str2
Код: plsql
1.
INSTR+SUBSTR
...
Рейтинг: 0 / 0
regexp_substr выбрать все символы между двумя метками
    #39447978
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny2,
Код: plsql
1.
2.
3.
4.
5.
select
substr('Str1:    1d2fg    \\nStr2:    456\7hh/h345     \\nStr3:    456dddjjj66    \\n \\n \\n', 
instr('Str1:    1d2fg    \\nStr2:    456\7hh/h345     \\nStr3:    456dddjjj66    \\n \\n \\n', 'Str2:'), 
instr('Str1:    1d2fg    \\nStr2:    456\7hh/h345     \\nStr3:    456dddjjj66    \\n \\n \\n', '\\n'))
from dual;
...
Рейтинг: 0 / 0
regexp_substr выбрать все символы между двумя метками
    #39447985
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny2,

Извиняюсь так корректней.

Код: plsql
1.
2.
3.
4.
select replace  (replace( substr('Str1:    1d2fg    \\nStr2:    456\7hh/h345     \\nStr3:    456dddjjj66    \\n \\n \\n', 
instr('Str1:    1d2fg    \\nStr2:    456\7hh/h345     \\nStr3:    456dddjjj66    \\n \\n \\n', 'Str2:'), 
22) ,chr(32) ), 'Str2:') str
from dual;
...
Рейтинг: 0 / 0
regexp_substr выбрать все символы между двумя метками
    #39447994
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> declare
  2      st varchar2(100) := 'Str1:    1d2fg    \\nStr2:    456\7hh/h345     \\nStr3:    456dddjjj66    \\n \\n \\n';
  3  begin
  4      dbms_output.put_line('[' ||
  5                           regexp_substr(
  6                                         st,
  7                                         '(^|\\\\n)Str2:(.*?)\\\\n',
  8                                         1,
  9                                         1,
 10                                         null,
 11                                         2
 12                                        )
 13                          || ']'
 14                          );
 15  end;
 16  /
[    456\7hh/h345     ]

PL/SQL procedure successfully completed.

SQL> 



SY.
...
Рейтинг: 0 / 0
regexp_substr выбрать все символы между двумя метками
    #39448025
Evgeny2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY - больше спасибо.

Прочувствовал на практике смысл ленивых(нежадных) квантификаторов.

SY а почему ты задал так (^|\\\\n) перед Str2.
Ведь можно сразу взять групу (Str2:) и не важно что находится перед Str2.
Код: plsql
1.
'(Str2:)(.*?)\\\\n'
...
Рейтинг: 0 / 0
regexp_substr выбрать все символы между двумя метками
    #39448046
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny2Ведь можно сразу взять групу (Str2:)"Магия данных". Если идентификаторы имеют формат строго StrN, совпадения окончаний не будет.
...
Рейтинг: 0 / 0
regexp_substr выбрать все символы между двумя метками
    #39448060
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny2SY а почему ты задал так (^|\\\\n) перед Str2.
Ведь можно сразу взять групу (Str2:) и не важно что находится перед Str2.




Тебе видней. Я ведь не знаю может ли текст Str2: быть частью текста или, например, подстрока может начинаься с \\nAnotherSTR2:

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


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