powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Опять регулярные выражения
26 сообщений из 26, показаны все 2 страниц
Опять регулярные выражения
    #39334101
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллени нужна помощь в решении следующей задачи.
Есть табличка с текстом по которому прогоняю следующий скрипт:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table 24102016 as
select d.doc_id 
from DOC_TEXTS dt, documents d
where  (regexp_like(lower(dt.text) ,'в *закритому *судовому')  or regexp_like(lower(dt.text) ,'у *закритому *судовому')
or (regexp_like(lower(dt.text) ,'в'||chr(10)||' *закритому *судовому') or regexp_like(lower(dt.text) ,'у'||chr(10)||' *закритому *судовому')))
and not regexp_like(lower(dt.text) ,'підготовче *судове *засідання')
and not regexp_like(lower(dt.text) ,'в *відкритому *судовому')
and not regexp_like(lower(dt.text) ,'у *відкритому *судовому')
and not regexp_like(lower(dt.text) ,'доступ *заборонен.')
and not regexp_like(lower(dt.text) ,'дітям *війни')
and d.doc_id = dt.doc_doc_id
and d.st_st_id != 7
and dt.is_impersonal = 0
and d.dt_import between to_date('24.10.2016 00:00:01','dd.mm.rrrr hh24:mi:ss') and to_date('24.10.2016 23:59:59','dd.mm.rrrr hh24:mi:ss');



Можно ли его оптимизировать и как, это первый вопрос.
Ну и второй вопрос, как можно обрезать поиск до слова - ВСТАНОВИВ или УХВАЛИВ, которая встречается первый раз в тексте в выражении:
Код: sql
1.
regexp_like(lower(dt.text) ,'в *закритому *судовому'


но при этом, чтобы условие NOT работало для всего документа.
Версия БД:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39334369
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.logМожно ли его оптимизировать и как, это первый вопрос.Можно. По разному.
trace.logНу и второй вопрос, как можно обрезать поиск до слова - ВСТАНОВИВ или УХВАЛИВ, которая встречается первый раз в тексте в выражении 19534288
trace.loglowerОткрой для себя match_parameter 'i'.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39334677
isdenno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trace.log,
например так
Код: plsql
1.
regexp_like(dt.txt, '(((в|у)[[:space:]]+((закритому)|(відкритому))[[:space:]]+(судовому))|(доступ заборонен.)|(дітям війни)|(підготовче судове засідання)).+(ВСТАНОВИВ)|(УХВАЛИВ)') 
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39334928
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
isdennotrace.log,
например так
Код: plsql
1.
regexp_like(dt.txt, '(((в|у)[[:space:]]+((закритому)|(відкритому))[[:space:]]+(судовому))|(доступ заборонен.)|(дітям війни)|(підготовче судове засідання)).+(ВСТАНОВИВ)|(УХВАЛИВ)') 



к сожалению, даже не близко (((
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335028
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

вот что получилось после оптимизации (может можно еще дооптимизировать, пока пробую):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select distinct d.doc_id
from DOC_TEXTS dt, documents d, DOC_IMAGES di
where  
(regexp_like(dt.text ,'((в|у)[[:space:]]+(закритому)[[:space:]]+(судовому))','i'))
and not regexp_like(dt.text ,'підготовч(е|ому) *судов(е|ому) *засіданн(я|і)','i')
and not regexp_like(dt.text ,'(в|у) *відкритому *судовому','i') 
and not regexp_like(dt.text ,'доступ *заборонен.','i')  
and not regexp_like(dt.text ,'дітям *війни','i')
and d.doc_id = dt.doc_doc_id
and D.DOC_ID=DI.DOC_DOC_ID
and d.st_st_id != 7
and dt.is_impersonal = 0


но не могу понять, как указать регулярке - поиск проводи до момента первой встречи фразы:
ВСТАНОВИВ(ЛА) или УХВАЛИВ(ЛА)
но при этом условие not отрабатывалось по всему документу.
Если можно пример, то буду благодарен.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335129
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.logно не могу понять, как указать регулярке - поиск проводи до момента первой встречи фразыТы если б формулировал мысли не так сумбурно и приводил пример данных - ответ получил бы намного раньше.

Если ты хочешь в регулярке искать до момента "первой встречи фразы" - первое вхождение? То отключи жадность.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select
t.*,
regexp_substr(str,'^.*(встановив|ухвалив)') x1,
regexp_substr(str,'^.*?(встановив|ухвалив)') x2
from (select 'trace.log встановив втановив ухвалив qwerty' str from dual) t;

STR
-------------------------------------------
X1
-------------------------------------------
X2
-------------------------------------------
trace.log встановив втановив ухвалив qwerty
trace.log встановив втановив ухвалив
trace.log встановив
Только зачем тебе это если у тебя regexp_like.

Если цель фетчить строки до первого вхождения чего-то - фетчи явно из курсора в PL/SQL.
Можно сделать на чистом SQL через аналитику, но будет дольше из-за сортировки.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335177
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

Попробую пример привести чего я хочу...
Есть текстовое поле text в котором собсвенно находится текст, как пример:

Слідчий суддя Красноармійського міськрайонного суду Донецької області
при секретарі за участю прокурора розглянувши в закритому судовому засіданні клопотання слідчого першого відділу військової прокуратури Донецького гарнізону за погодженням з прокурором першого відділу військової прокуратури Донецького гарнізону про дозвіл на затримання з метою приводу підозрюваного, який підозрюється у вчиненні кримінального правопорушення, передбаченого ,
УХВАЛИЛА :
В задоволенні клопотання слідчого першого... доступ заборонено тому що...

1.Необходимо чтобы при поиске в данном тексте учитывалась фраза: в закритому судовому засіданні , но чтобы она именно была до фразы УХВАЛИЛА , если она идет после фразы УХВАЛИЛА , то в результат выдачи этот текст не попадает.
2.Если фраза в закритому судовому засіданні есть, но при этом присутствует джалее по тексту доступ заборонено , то в результат выдачи этот текст тоже не попадает.
Можно это реализовать через regexp_like за один проход?
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335240
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log,

Ты по ссылке ходил, что я приводил?
Вот пример когда фильтруются строки имеющие bbb перед которым есть aaa, а после не встречается ccc.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
with t as
(select 'zzz aaa bbb ccc qwerty' str from dual
union all select 'zzz aaa bbb qwerty' str from dual
union all select 'zzz bbb aaa ccc qwerty' str from dual)
select 
t.*,
case when regexp_like(str_mod, 'aaa.*bbb[^#]*$') then 1 end sign
from (select replace(t.str, 'ccc', '#') str_mod, str from t) t

Если это не разовый запрос, то с твоим дизайном все печально.

Как-то не очень много желания помогать человеку, который создает тему и не не удосуживается перейти по ссылке которую ему даешь.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335255
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

По ссылке ходил, но не увидел там regexp_like поэтому и засомневался в реализации моей задачи средствами регулярных выражений. За пример спасибо, буду смотреть.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335265
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log,

Основная мысль была что в Oracle нет negative Lookahead/Lookbehind и workaround через replace на один символ.
Если немного подумать можно догадаться что нет разницы что из regexp_* используется... ну это надо подумать, да.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335301
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

я больше админ нежели программер, поэтому не совсем понимаю регулярные выражения, НО спасибо откликнувшимся, думаю что постепенно разберусь, хотя как ппц сложно понять конструкцию [^#]*$.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335482
Plohoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А просто так не подходит?

not like '%УХВАЛИЛА%в закритому судовому засіданні%'
и
not like '%в закритому судовому засіданні%заборонено%'
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39335757
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Plohoy,

Попробую так еще, спс.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336044
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть пример:
Код: sql
1.
2.
3.
4.
5.
6.
with t as (select '#2 apps(0_-ORACLE+*.ru_ )ПРИ13мер' str from dual)
select str
     , regexp_replace(str,'[^[[:alpha:]]]*') as only_char
     , regexp_replace(str,'[^[[:digit:]]]*') as only_number
from t
/


Результат которого:

STRONLY_CHARONLY_NUMBER #2 apps(0_-ORACLE+*.ru_ )ПРИ13мер appsORACLEruПРИмер2013


Как получить значения все в нижнем регистре для строки:
Код: sql
1.
regexp_replace(str,'[^[[:alpha:]]]*')


без использования обертки lower
Код: sql
1.
regexp_replace(lower(str),'[^[[:alpha:]]]*')
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336049
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.logбез использования обертки lower
напиши через replace/translate
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336064
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,

я думал, что можно применить match_parameter – 'i', но пока никак не получается.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336107
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.logя думал
меньше думать, больше доку читать. за что отвечает данный параметр
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336148
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййtrace.logя думал
меньше думать, больше доку читать. за что отвечает данный параметр

Неправильно выразился значит.
'i' – поиск без учёта регистра
Его прикрутить к данному примеру возможно или нет?
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336174
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log'i' – поиск без учёта регистра
а теперь постараемся подумать над тем что прочитали.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336181
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййtrace.log'i' – поиск без учёта регистра
а теперь постараемся подумать над тем что прочитали.

подумал, вот запрос, которым ищу данные:
Код: sql
1.
regexp_like(regexp_replace(lower(dt.text),'[^[[:alpha:]]]*'),('((в|у)закритомусудовому.*(встанови(в|ла)|ухвали(в|ла))){1}'))


как здесь избавиться от lower , чтобы поиск не был привязан к регистру.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336198
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log,

посмотреть доку на "лайку"
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336232
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййtrace.log,

посмотреть доку на "лайку"

что именно смотреть?? уже 3 дня смотрю ((
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336286
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log,

Код: plsql
1.
2.
3.
with t as (select '#2 apps(0_-ORACLE+*.ru_ )ПРИ13мер' str from dual)
..
REGEXP_LIKE(regexp_replace(str,'[^[[:alpha:]]]*'),'oRa','i')
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336299
isdenno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trace.log,

Может еще такой вариант
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with q as (
select 
'Слідчий суддя Красноармійського міськрайонного суду Донецької області
при секретарі за участю прокурора розглянувши в закритому судовому засіданні клопотання слідчого першого відділу військової прокуратури Донецького гарнізону за погодженням з прокурором першого відділу військової прокуратури Донецького гарнізону про дозвіл на затримання з метою приводу підозрюваного, який підозрюється у вчиненні кримінального правопорушення, передбаченого , 
УХВАЛИЛА:
В задоволенні клопотання слідчого першого...доступ заборонено тому що...' txt 
from dual)
select *
  from q
where regexp_substr(q.txt, '((в закритому судовому засіданні).*[[:space:]]УХВАЛИЛА:)([[:space:]].*доступ заборонено){1}', 1, 1, 'c', 3) is null
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336313
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййtrace.log,

Код: plsql
1.
2.
3.
with t as (select '#2 apps(0_-ORACLE+*.ru_ )ПРИ13мер' str from dual)
..
REGEXP_LIKE(regexp_replace(str,'[^[[:alpha:]]]*'),'oRa','i')



Спасибо.
...
Рейтинг: 0 / 0
Опять регулярные выражения
    #39336387
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
isdenno,

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


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