powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как использовать nonmatching в REGEXP_SUBSTR ?
12 сообщений из 12, страница 1 из 1
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130853
максим_1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть строка :
Код: plsql
1.
 '125841Parents-Site'



Надо достать число, оно всегда в начале :
Код: plsql
1.
SELECT  REGEXP_SUBSTR('125841Parents-Site','\d{5,6}',1,1,'i')FROM dual


Вопрос: как правильно написать условие nonmatching, исключая последовательность чисел длинее 6 символов и более , где в результирующем наборе должно вернуться null?

Пробовал по всякому:
Код: plsql
1.
 SELECT  REGEXP_SUBSTR('1258417Parents-Site','([^\d{7,}])(\d{5,6})',1,1,'i')FROM dual



Такое возможно без использования предварительного очищения REGEXP_replace ?
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130858
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
максим_1991,

Столько написал, а все невнятно... Что ты хочешь? Только группу цифр в начале строки, если она не длиннее 6 подряд цифр?
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130860
максим_1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov, всё верно.
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130862
максим_1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov, я думаю что функция REGEXP_SUBSTR может работать по логике if then, после первичный проверки делать условие для истины, в случае лжи ничего не делать.. Типо так наверно быстрее будет ...
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130867
ASNexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
максим_1991
Есть строка :
Код: plsql
1.
 '125841Parents-Site'



Надо достать число, оно всегда в начале :
Код: plsql
1.
SELECT  REGEXP_SUBSTR('125841Parents-Site','\d{5,6}',1,1,'i')FROM dual


Вопрос: как правильно написать условие nonmatching, исключая последовательность чисел длинее 6 символов и более , где в результирующем наборе должно вернуться null?

Пробовал по всякому:
Код: plsql
1.
 SELECT  REGEXP_SUBSTR('1258417Parents-Site','([^\d{7,}])(\d{5,6})',1,1,'i')FROM dual



Такое возможно без использования предварительного очищения REGEXP_replace ?


Например, так:
Код: plsql
1.
SELECT REGEXP_SUBSTR('125841Parents-Site', '^(\d{5,6})(\D|$)', 1, 1, 'i', 1) FROM dual
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130869
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASNexus

Например, так:
Код: plsql
1.
SELECT REGEXP_SUBSTR('125841Parents-Site', '^(\d{5,6})(\D|$)', 1, 1, 'i', 1) FROM dual



А какой сакральный смысл в 'i'? Что цифры тоже регистрозависимы?

SY.
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130872
ASNexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY
ASNexus

Например, так:
Код: plsql
1.
SELECT REGEXP_SUBSTR('125841Parents-Site', '^(\d{5,6})(\D|$)', 1, 1, 'i', 1) FROM dual



А какой сакральный смысл в 'i'? Что цифры тоже регистрозависимы?

SY.


Надо же в этот параметр что-то передать Можно конечно и null (а я просто скопипастил автора)
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130887
максим_1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, есть примеры строк где нужно исключать слова из поиска.. Я показал простой приер из все задачи который не понял как .. Теперь понял
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130908
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
максим_1991,

ASNexus показал простой правильный подход - лучше его и использовать, а я чисто для расширения кругозора покажу другой вариант на основе "если не": если не 7+ цифр подряд, то ...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as (
   SELECT
     substr('1234567890',1,level)||'Parents-Site' str
   from dual
   connect by level<=10
)
SELECT
    str
   ,REGEXP_SUBSTR(str,'^(\d{1,6})(\D|$)',1,1,'i',1) s1
   ,REGEXP_SUBSTR(str,'^((\d{7,})|(\d+))',1,1,'i',3) s2
FROM t;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
STR                    S1                   S2
---------------------- -------------------- --------------------
1Parents-Site          1                    1
12Parents-Site         12                   12
123Parents-Site        123                  123
1234Parents-Site       1234                 1234
12345Parents-Site      12345                12345
123456Parents-Site     123456               123456
1234567Parents-Site
12345678Parents-Site
123456789Parents-Site
1234567890Parents-Site

10 rows selected.

...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130909
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
или нагляднее для {5,6}
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
with t as (
   SELECT
     substr('1234567890',1,level)||'Parents-Site' str
   from dual
   connect by level<=10
)
SELECT
    str
   ,REGEXP_SUBSTR(str,'^(\d{5,6})(\D|$)',1,1,'i',1) s1
   ,REGEXP_SUBSTR(str,'^((\d{7,})|(\d{5,}))',1,1,'i',3) s2
FROM t;

STR                    S1                   S2
---------------------- -------------------- --------------------
1Parents-Site
12Parents-Site
123Parents-Site
1234Parents-Site
12345Parents-Site      12345                12345
123456Parents-Site     123456               123456
1234567Parents-Site
12345678Parents-Site
123456789Parents-Site
1234567890Parents-Site

10 rows selected.

...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40130917
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без regexp:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
with t as (
   SELECT
     substr('1234567890',1,level)||'Parents-Site' str
   from dual
   connect by level<=10
)
SELECT
    str
   ,CASE
      WHEN LENGTH(str) - NVL(LENGTH(LTRIM(STR,'0123456789')),0) BETWEEN 5 AND 6
        THEN SUBSTR(str,1,LENGTH(str) - NVL(LENGTH(LTRIM(STR,'0123456789')),0))
    END s
FROM t
/

STR                    S
---------------------- ------
1Parents-Site
12Parents-Site
123Parents-Site
1234Parents-Site
12345Parents-Site      12345
123456Parents-Site     123456
1234567Parents-Site
12345678Parents-Site
123456789Parents-Site
1234567890Parents-Site

10 rows selected.

SQL>
...
Рейтинг: 0 / 0
Как использовать nonmatching в REGEXP_SUBSTR ?
    #40131042
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SY,

я тоже об этом подумал еще и второй вариант сварганил:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t as (
   SELECT
     substr('1234567890',1,level)||'Parents-Site' str
   from dual
   connect by level<=10
)
SELECT
    str
   ,CASE
      WHEN LENGTH(str) - NVL(LENGTH(LTRIM(STR,'0123456789')),0) BETWEEN 5 AND 6
        THEN SUBSTR(str,1,LENGTH(str) - NVL(LENGTH(LTRIM(STR,'0123456789')),0))
    END s
   ,translate(substr(STR,1,7),'0123456789'||substr(STR,1,7),'0123456789') s2
FROM t
/

STR                       S          S2
------------------------- ---------- ----------
1Parents-Site                        1
12Parents-Site                       12
123Parents-Site                      123
1234Parents-Site                     1234
12345Parents-Site         12345      12345
123456Parents-Site        123456     123456
1234567Parents-Site                  1234567
12345678Parents-Site                 1234567
123456789Parents-Site                1234567
1234567890Parents-Site               1234567

10 rows selected.

но учитывая
максим_1991
SY, есть примеры строк где нужно исключать слова из поиска..
передумал их постить здесь, т.к. варианты выше с регулярусами сработают и для слов, в отличие от этого :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как использовать nonmatching в REGEXP_SUBSTR ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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