powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / регулярное выражение
18 сообщений из 18, страница 1 из 1
регулярное выражение
    #39308060
Adylov Timur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
Не могу составить регулярное выражение. Мне необходимо найти слово 'слово' в предложении, которое не находится внутри кавычек
Например дана последовательность
Код: sql
1.
слово мама картофель "слово" 


берем первое 'слово'
Код: sql
1.
мама картофель "слово"  слово 


берем второе 'слово'
Код: sql
1.
"мама картофель слово пингвин"  слово 


берем второе слово

Необходимо, чтобы после нужного нам 'слово' шло [:space:]

Подскажите, а то я уже устал подбирать, опыта в таких делах не имею
...
Рейтинг: 0 / 0
регулярное выражение
    #39308067
Adylov Timur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Adylov Timur,
Код: plsql
1.
2.
3.
4.
5.
declare
  sql_text varchar2(4000):= 'слово " слово картина"';
begin
    dbms_output.put_line(REGEXP_INSTR(sql_text, '"[[:space:]|[:alnum:]|,|\.|:|;|\\|<|>|\?|/|''|\||!@|#|$|%|^|&|\*|(|)|_|+|=|-]*слово[[:space:]|[:alnum:]|,|\.|:|;|\\|<|>|\?|/|''|\||!@|#|$|%|^|&|\*|(|)|_|+|=|-]*"',1,1,0,'i'));
end;


что-то вроде такого наоборот ищет слово в кавычках, а теперь надо наоборот.
Как это можно сделать???
...
Рейтинг: 0 / 0
регулярное выражение
    #39308079
Adylov Timur,

цикл по инстрам.
...
Рейтинг: 0 / 0
регулярное выражение
    #39308084
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Adylov Timurчто-то вроде такого наоборот ищет слово в кавычках, а теперь надо наоборот.
Как это можно сделать???

Если нет многоуровнего вложения двойных кавычeк, то:

Код: plsql
1.
2.
3.
4.
REGEXP_SUBSTR(
              REGEXP_REPLACE(строка,'"[^"]*"','|'), -- мeняем "текст в двойных кавычках" на |
              'слово' -- ищем слово
             )



SY.
...
Рейтинг: 0 / 0
регулярное выражение
    #39308695
Adylov Timur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно узнать номер позиции вхождения этого слова. Так я не смогу узнать
SY
Если нет многоуровнего вложения двойных кавычeк, то:

Код: plsql
1.
2.
3.
4.
REGEXP_SUBSTR(
              REGEXP_REPLACE(строка,'"[^"]*"','|'), -- мeняем "текст в двойных кавычках" на |
              'слово' -- ищем слово
             )



SY.
...
Рейтинг: 0 / 0
регулярное выражение
    #39308784
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Adylov Timurномер позиции замени substr на instr
...
Рейтинг: 0 / 0
регулярное выражение
    #39308791
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййAdylov Timurномер позиции замени substr на instrТы не заметил, что позиции уже убиты до этого?
...
Рейтинг: 0 / 0
регулярное выражение
    #39308889
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

упс.
Код: plsql
1.
'|' на rpad('|', length(regexp_substr(
...
Рейтинг: 0 / 0
регулярное выражение
    #39308899
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййупс.
Код: plsql
1.
'|' на rpad('|', length(regexp_substr(

Ну-ну…
Код: plsql
1.
'"словечко" "слово" слово'
...
Рейтинг: 0 / 0
регулярное выражение
    #39308997
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Adylov TimurМне нужно узнать номер позиции вхождения этого слова.Поскольку в оракловых регулярках не реализовано negative lookahead/lookbehind, то приходится извращаться.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> with t0
  2       as (select 'slovo1 mama kkk "slovo2"' str from dual
  3           union all
  4           select '"mama" kkk "slovo1" slovo2' id from dual
  5           union all
  6           select '"mama kkk slovo1 ppp" slovo2' id from dual),
  7       t1 as (select replace(str, 'slovo', '#') str from t0),
  8       t2 as (select regexp_replace(str, '(("[^"]*"[^#"]*)*)(#)', '\1@\3', 1, 1) str from t1),
  9       t3 as (select replace(str, '#', 'slovo') str from t2)
 10  select replace(str, '@', '') str, regexp_instr(str, '@slovo') idx
 11    from t3;

STR                                                       IDX
-------------------------------------------------- ----------
slovo1 mama kkk "slovo2"                                    1
"mama" kkk "slovo1" slovo2                                 21
"mama kkk slovo1 ppp" slovo2                               23
...
Рейтинг: 0 / 0
регулярное выражение
    #39309021
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если полагаться на строгую парность скобок, то достаточно оперделить их четность по одну сторону от искомого
Код: plsql
1.
regexp_instr(str, 'слово([^"]*"[^"]*")*[^"]*$')
...
Рейтинг: 0 / 0
регулярное выражение
    #39309105
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
with t as (select '"просто слово" то что нужно - слово выбрать "не слово"' as s, 'слово' as p from dual)
select s,
       p,
       regexp_replace(s,'("[^"]*)'||p||'([^"]*)"','\1'||lpad('~',length(p),'~')||'\2'),
       instr(regexp_replace(s,'("[^"]*)'||p||'([^"]*)"','\1'||lpad('~',length(p),'~')||'\2'),p),
       substr(s,instr(regexp_replace(s,'("[^"]*)'||p||'([^"]*)"','\1'||lpad('~',length(p),'~')||'\2'),p))
from t
;



P.S. что-то там с пробелом
...
Рейтинг: 0 / 0
регулярное выражение
    #39309288
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По совету SY

Ну такого я точно не советовал посколько прекрасно понимaю слово внутри кавычек может встретится многократно.

SY.
...
Рейтинг: 0 / 0
регулярное выражение
    #39309322
Adylov Timur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, как-то так можно

declare
sql_text varchar2(4000):= '"папа слово машина слово" "куршавель слово мент" слово "слово"';
sql_text_test varchar2(4000);
l_count number;
begin
sql_text_test := sql_text;
LOOP
IF (REGEXP_INSTR(sql_text_test, '"[^"]*"',1,1,0,'i') = 0) THEN
EXIT;
END IF;

l_count := REGEXP_INSTR(sql_text_test, '"[^"]*"',1,1,1,'i') - REGEXP_INSTR(sql_text_test, '"[^"]*"',1,1,0,'i');
sql_text_test := REGEXP_REPLACE(sql_text_test, '"[^"]*"', rpad(' ', l_count),1,1,'i');
END LOOP;
dbms_output.put_line(sql_text_test);
end;
...
Рейтинг: 0 / 0
регулярное выражение
    #39309381
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Adylov TimurSY, как-то так можно


Ну и где здесь "нужно узнать номер позиции вхождения этого слова"?

Воспользуйся решением от -2- 19657143

SY.
...
Рейтинг: 0 / 0
регулярное выражение
    #39309812
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чисто для прикола...

select str,idx from (
select substr(s,1,A_IDX-1) || lpad('~',A_LEN,'~') || substr(s,A_LEN+1,B_IDX-A_LEN-1) || lpad('~',B_LEN,'~') as str
,instr(substr(s,1,A_IDX-1) || lpad('~',A_LEN,'~') || substr(s,A_LEN+1,B_IDX-A_LEN-1) || lpad('~',B_LEN,'~'),'слово ') as idx
,A_QU, A_IDX, A_LEN, B_QU, B_IDX, B_LEN, C_QU, C_LEN, C_IDX from (
select s, level lv, regexp_substr(s, '(")([^"]*)(")',1,level) quote, length(regexp_substr(s, '(")([^"]*)(")',1,level)) len
,regexp_instr(s, '(")([^"]*)(")',1,level) indx
from(
select 'слово " слово картина"' as s from dual
)
connect by regexp_substr(s, '(")([^"]*)(")',1,level) is not null
)
pivot(
max(quote) as qu, max(indx) as idx, max(len) as len for (lv) in ('1' as a, '2' as b, '3' as c, '4' d )
)
)
...
Рейтинг: 0 / 0
регулярное выражение
    #39309920
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnet,

Тебе надо к психиатру...
...
Рейтинг: 0 / 0
регулярное выражение
    #39310012
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
Неожиданная реакция...
паранойя ментора?

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


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