Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов / 11 сообщений из 11, страница 1 из 1
05.03.2020, 10:48
    #39934501
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
Добрый день.

Подскажите пожалуйста.
Требуется выбрать строку, которая НЕ начинается с определенных комбинаций + та строка, которая подошла, должна иметь определённый набор символов.

Что-то типа "([^(AAA|BBB)][<CharSets>]){1,35}"

Вот пример:

Код: plsql
1.
2.
3.
4.
WITH
  TMain AS(SELECT 'A-Za-z0-9А-Яа-я+-.,:;* ()=?%/ўіІЎЁё' AS charSet FROM DUAL)
SELECT regexp_substr('/MARK/213213213AAAasdsadsa', REPLACE('/MARK/([^(AAA|BBB)][<CharSets>]){1,35}', '<CharSets>', charSet))
FROM TMain;



Оно мне берет первую букву "А" из той комбинации, которую надо исключить.

Проблема в том, что я знаю, как отдельно указать правило: "НЕ начинать строку с...", и как отдельно указать набор символов.
Но как указать оба этих правила одновременно, не могу придумать.
...
Рейтинг: 0 / 0
05.03.2020, 10:55
    #39934506
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
IMNO
которая НЕ начинается с определенных комбинаций
Отрицание последовательности символов в Oracle-овом RE - нетривиальная (=бессмысленная) задача.
IMNO
Код: plsql
1.
'[^(AAA|BBB)]'

Т.е. синтаксис RE придумал сам, а докумегнтацию не читал?
...
Рейтинг: 0 / 0
05.03.2020, 13:33
    #39934643
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
IMNO
..
Проблема в том, что я знаю, как отдельно указать правило: "НЕ начинать строку с...", и как отдельно указать набор символов.
Но как указать оба этих правила одновременно, не могу придумать.

условия каждого правила проверяйте отдельно (то есть - ляляля аnd тополя)
...
Рейтинг: 0 / 0
05.03.2020, 13:34
    #39934644
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
...
Рейтинг: 0 / 0
05.03.2020, 14:56
    #39934692
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
IMNO,

выбрать строку, которая НЕ начинается с определенных комбинаций:

Код: plsql
1.
2.
3.
4.
...
WHERE строкa NOT LIKE 'комбинация1%'
  AND строкa NOT LIKE 'комбинация2%'
...



Или WHERE NOT REGEXP_LIKE...

SY.
...
Рейтинг: 0 / 0
05.03.2020, 15:02
    #39934696
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов


Два чая этому Джентльмену.

Менять наборы на один символ, а потом писать типа "[^<символ>]".

P.S. Какое-то извращение :)
...
Рейтинг: 0 / 0
05.03.2020, 15:13
    #39934708
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
IMNO

Два чая этому Джентльмену.


Ты вообще понимаешь что "достать word1 и word3, между которыми нет word2" и "выбрать строку, которая НЕ начинается с определенных комбинаций" это две совершенно разные по сложности задачи. Твоя решается элементарным WHERE.

SY.
...
Рейтинг: 0 / 0
05.03.2020, 15:32
    #39934730
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
SY
IMNO

Два чая этому Джентльмену.


Ты вообще понимаешь что "достать word1 и word3, между которыми нет word2" и "выбрать строку, которая НЕ начинается с определенных комбинаций" это две совершенно разные по сложности задачи. Твоя решается элементарным WHERE.

SY.

Ну думаю, что понимаю.
Дело в том, что в твоём примере строка жёстко начинается с не нужной комбинации.
В моем примере склеено несколько строк, а не жёстко начинается с не нужной комбинации.
То есть твой пример у меня как-то так будет выглядеть:

Код: plsql
1.
2.
3.
4.
...
WHERE строкa NOT LIKE '/MARK/213213213AAAasdsadsa%'
          AND....
...



Лучше я переформулирую свою задачу:
Мне нужно вырезать значение, которое находится между "/MARK/" и "AAA". Длина нужного значения может быть от 1 до 35 символов. Обычно я такие штуки делаю регулярками типа:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
WITH
  TMain AS(SELECT 'A-Za-z0-9А-Яа-я+-.,:;* ()=?%/ўіІЎЁё' AS charSet
                  , '`'                                 AS charChange 
           FROM DUAL)
SELECT regexp_replace(REPLACE('/MARK/test12aAAA9sdsadsa', 'AAA', charChange)
                      , REPLACE(REPLACE('^/MARK/([<CharSets>]{1,35}[^AAA]).+$', '<CharSets>', charSet), 'AAA', charChange), '\1')
FROM TMain;



Ну и в целом для информации. Это не самый сложный шаблон строки. Есть по-забористее,
поэтому я всегда использую регулярки. Я думаю, что это проще, чем упарываться через циклы, SUBSTR() и INSTR().
...
Рейтинг: 0 / 0
05.03.2020, 15:34
    #39934732
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
IMNO,

https://github.com/xtender/XT_REGEXP - для сложных регулярок
...
Рейтинг: 0 / 0
05.03.2020, 15:43
    #39934734
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
Думаю, я как и большинство тут не совсем понимают, что ты хочешь получить.
То ты писал про возврат строки, которая отвечает условию, то теперь сабстр по шаблону.

Давай так, напиши пример в несколько строк исходных данных и что ты хочешь получить из них в итоге.
...
Рейтинг: 0 / 0
05.03.2020, 15:51
    #39934743
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов
Кобанчег мне уже помог. Своим предыдущим сообщением я ответил на претензию в мою сторону. Можно расходится.
Всем спасибо, что обратили внимание на мою тему.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярное выражение. Начинается НЕ с *комбинации* + указан набор символов / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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