Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярное выражение, ограничить количество / 22 сообщений из 22, страница 1 из 1
12.02.2019, 16:23
    #39772937
Kino36
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение, ограничить количество
Всем привет, написал такое выражение

https://regexr.com/4879f

Задумка была, чтобы оно работало, когда вводишь цифры и %. Вроде работает, но я дополнительно хочу ограничить размер строки от 1 до 20 символов, возможно ли такое?
...
Рейтинг: 0 / 0
12.02.2019, 16:24
    #39772939
Kino36
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение, ограничить количество
пока писал, понял ))) вопрос снимается
...
Рейтинг: 0 / 0
12.02.2019, 18:17
    #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
12.02.2019, 18:26
    #39773000
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение, ограничить количество
Kino36не работает. Как так?
Что получить-то хотели?
Тестовый примерчик бы показали, что-ли...
...
Рейтинг: 0 / 0
12.02.2019, 18:48
    #39773010
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение, ограничить количество
Kino36,

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

Regards

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

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

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

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

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

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

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

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

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

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

regexp_replace(строка, '^(\d|_|(%)){1,20}$','\2') = '%'
...
Рейтинг: 0 / 0
13.02.2019, 10:51
    #39773206
Kino36
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение, ограничить количество
Спасибо!
...
Рейтинг: 0 / 0
13.02.2019, 20:12
    #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
13.02.2019, 20:22
    #39773578
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение, ограничить количество
andrey odegov,

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

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

,Извините, не понял :)Это запятая. А теперь включай мозг.
...
Рейтинг: 0 / 0
14.02.2019, 10:24
    #39773715
andrey odegov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение, ограничить количество
Ты не экзаменатор и я тебе ничем не обязан.
В рег. выражении Kino36 запятая есть, а в другом даже две.
Откуда я знаю это так и должно быть или попытка перечислить альтернативы.
И второе, если из моего рег. выражения убрать запятую, то чем не вариант?
...
Рейтинг: 0 / 0
14.02.2019, 10:33
    #39773722
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение, ограничить количество
andrey odegovесли из моего рег. выражения убрать запятую, то чем не вариант?Не соответствует требованию "чтобы % обязательно был".
...
Рейтинг: 0 / 0
14.02.2019, 21:26
    #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
14.02.2019, 21:43
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярное выражение, ограничить количество / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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