powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярное выражение, ограничить количество
22 сообщений из 22, страница 1 из 1
Регулярное выражение, ограничить количество
    #39772937
Kino36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, написал такое выражение

https://regexr.com/4879f

Задумка была, чтобы оно работало, когда вводишь цифры и %. Вроде работает, но я дополнительно хочу ограничить размер строки от 1 до 20 символов, возможно ли такое?
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39772939
Kino36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пока писал, понял ))) вопрос снимается
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39772995
Kino36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот и хрен. На сайте работает, а когда в regexp_like передаю шаблон - не работает. Как так?

https://regex101.com/r/vtaDzm/1

select 1 from dual where regexp_like('12345810__%','^((?=.*[0-9]|_)(?=.*%)[0-9,_,%]{1,20}){1}$')
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773000
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kino36не работает. Как так?
Что получить-то хотели?
Тестовый примерчик бы показали, что-ли...
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773010
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kino36,

Oracle синтакс не поддерживает positive lookahead ?=

Regards

Maxim
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773028
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kino36,

length(str) <= 20 and rtrim(str, '1234567890_%') is null
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773118
Kino36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

так вот же он, третьим постом.
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773119
Kino36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Demenko,

спасибо, неожиданно. Часа два бился над паттерном, чтобы выяснить, что он в оракле не работает ))

А есть какой-нибудь workaround?

Мне нужно, чтобы запись возвращалась, если в ней есть одновременно цифра и %. Это я валидацию в APEX встраиваю.
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773130
andrey odegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а такой шаблон не подойдет? https://rextester.com/LOEAB28569]
Код: plsql
1.
^[0-9,_,%]{1,20}$

...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773131
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey odegovа такой шаблон не подойдет? https://rextester.com/LOEAB28569]
Код: plsql
1.
^[0-9,_,%]{1,20}$

Запятых маловато
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773165
andrey odegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicandrey odegovа такой шаблон не подойдет? https://rextester.com/LOEAB28569]
Код: plsql
1.
^[0-9,_,%]{1,20}$

Запятых маловато
"Я вчера слишком поздно лег, сегодня рано встал..." (с)Цой В.
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773184
Kino36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey odegov,

я с этого начал, но в этом случае строка без % пройдет. А мне надо, чтобы % обязательно был. Т.е. что-то вроде % and (0-9 or _)
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773193
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kino36,

regexp_replace(строка, '^(\d|_|(%)){1,20}$','\2') = '%'
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773206
Kino36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773571
andrey odegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рискну предложить такой вариант :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 170 as c from dual where not regexp_like('12345810_%','[^[:digit:]_,%]|.{21,}')
union all
select 171 from dual where not regexp_like('%','[^[:digit:]_,%]|.{21,}')
union all
select 42 from dual where not regexp_like('!','[^[:digit:]_,%]|.{21,}')
union all
select 43 from dual where not regexp_like('12345810_%!','[^[:digit:]_,%]|.{21,}')
union all
select 44 from dual where not regexp_like('123458101234567890123456789012345678901234567890_%','[^[:digit:]_,%]|.{21,}')

C170171
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773578
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey odegov,

,
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773671
andrey odegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andrey odegov,

,Извините, не понял :)
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773675
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey odegov-2-andrey odegov,

,Извините, не понял :)Это запятая. А теперь включай мозг.
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773715
andrey odegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не экзаменатор и я тебе ничем не обязан.
В рег. выражении Kino36 запятая есть, а в другом даже две.
Откуда я знаю это так и должно быть или попытка перечислить альтернативы.
И второе, если из моего рег. выражения убрать запятую, то чем не вариант?
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39773722
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey odegovесли из моего рег. выражения убрать запятую, то чем не вариант?Не соответствует требованию "чтобы % обязательно был".
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39774125
andrey odegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andrey odegovесли из моего рег. выражения убрать запятую, то чем не вариант?Не соответствует требованию "чтобы % обязательно был". Да, погорячился я, но:
Код: 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.
with
  t as (
    select 0 n, '_170_' s from dual union all
    select 0 n, '_%%' s from dual union all
    select 1, '%170_' from dual union all
    select 0, '%171' from dual union all
    select 0, '172_' from dual union all
    select 0, '173' from dual union all
    select 1, '123456789012345678_%' from dual union all
    select 0, '12345678901234567890_%' from dual
  )
select n, s, length(s) l
from t
where not regexp_like(
            s,
            q'~[^[:digit:]_%]|
               .{21,}|
               ^(\d[[:digit:]%]*|
                 \d[[:digit:]_]*|
                 _[_[:digit:]]*|
                 _[_%]*|
                 %[%[:digit:]]*|
                 %[%_]*)$~',
            'x'
          )

NSL1%170_51123456789012345678_%20
...
Рейтинг: 0 / 0
Регулярное выражение, ограничить количество
    #39774130
andrey odegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не надо символ подчеркивания:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with
  t as (
    select 0 n, '170' s from dual union all
    select 0, '%%%' s from dual union all
    select 0, '10e6' from dual union all
    select 1, '%170%%%%%%' from dual union all
    select 1, '%%%%%%170%' from dual union all
    select 1, '%234567890123456789%' from dual union all
    select 0, '%2345678901234567890%' from dual
  )
select
  case
    when not regexp_like(s, '[^[:digit:]%]|.{21,}|^(\d\d*|%%*)$') then 1
    else 0
  end n,
  s,
  length(s) l
from t

NSL017030%%%3010e641%170%%%%%%101%%%%%%170%101%234567890123456789%200%2345678901234567890%21
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярное выражение, ограничить количество
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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