Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / регулярки(2) / 25 сообщений из 28, страница 1 из 2
16.08.2019, 09:40
    #39850165
nemlicat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Всем доброго дня! подскажите, пожалуйста, как при помощи Regexp_like найти повторяющиеся слова? Слова заведомо - неизвестны. Спасибо.
...
Рейтинг: 0 / 0
16.08.2019, 09:48
    #39850169
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Переверни ты уже страницу учебника, прочти про остальные регулярки.
Regexp_like - это тот же like, только в виде регулярки (неожиданно, правда?).
Regexp_like возвращает boolean, поэтому для решения твоих задач он вообще не подходит.
...
Рейтинг: 0 / 0
16.08.2019, 09:51
    #39850171
nemlicat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Dshedoo,
Видимо, вопрос поставлен не правильно. Нужно,чтоб он находил поля, где слово(любое) повторяется более 3 раз.
...
Рейтинг: 0 / 0
16.08.2019, 09:52
    #39850172
nemlicat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
nemlicat,

т.е записи.
...
Рейтинг: 0 / 0
16.08.2019, 09:53
    #39850173
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
nemlicatНужно,чтоб он находил поля
вначале найди поля, где будешь искать слова
...
Рейтинг: 0 / 0
16.08.2019, 09:55
    #39850174
nemlicat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
123йй, внесено дополнение - записи.
...
Рейтинг: 0 / 0
16.08.2019, 09:58
    #39850177
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
nemlicat,

а что такое "записи" ?
...
Рейтинг: 0 / 0
16.08.2019, 09:58
    #39850178
nemlicat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
123йй, строки.
...
Рейтинг: 0 / 0
16.08.2019, 10:18
    #39850186
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
nemlicat,

подели строку на слова и посчитай повторяющиеся.
...
Рейтинг: 0 / 0
16.08.2019, 10:22
    #39850187
nemlicat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
123йй, нужна только одна регулярка и это regexp_like. Как это сделать like'ом не понимаю.
...
Рейтинг: 0 / 0
16.08.2019, 10:30
    #39850194
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
nemlicat123йй, нужна только одна регулярка и это regexp_like. Как это сделать like'ом не понимаю.
Да, тут like достаточно.
Нужна регулярка вида: ([слово])[любые символы][ссылка на слово типа \1][количество повторов]
Только кол-во повторов всегда будет нестрогим из-за множества.
...
Рейтинг: 0 / 0
16.08.2019, 10:32
    #39850196
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Что-то типа такого:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with q(z) as (select 'Повторение 2 раза раза' from dual union all
select 'Повторение 1 раз' from dual union all
select 'Повторение повторение 2-3 раза раза раза' from dual union all
select 'Повторение повторение повторение 3-2 раза раза' from dual union all
select 'повторение повторение повторение повторение 4 раза раза раза раза' from dual
)

select * from q
where regexp_like(q.z,'((.*[^\s])\s.*?\2){2}','i')



Но мне самому не очень нравится это решение, может регулярные эксперты подскажут более элегантное решение?
...
Рейтинг: 0 / 0
16.08.2019, 10:36
    #39850201
nemlicat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Dshedoo,
Спасибо большое Вам!
...
Рейтинг: 0 / 0
16.08.2019, 10:39
    #39850202
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Dshedoo
Код: plsql
1.
'[^\s]'

Неразумная дичь.
...
Рейтинг: 0 / 0
16.08.2019, 10:59
    #39850226
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Elic,

Я не особо вникал в эту обработку, так накидал по-быстрому.
Если юзать лень, то с повторами дичь (на первый взгляд) происходит.
Можете подсказать, почему так? Или послать куда читать.
...
Рейтинг: 0 / 0
16.08.2019, 11:35
    #39850258
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Dshedooпослать куда читать all operators except these are treated as literals
...
Рейтинг: 0 / 0
16.08.2019, 11:46
    #39850265
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Elic,

Я больше по вопросу как работает "повтор" в регулярке.
Как правильно задать, что слово должно повторяться в строке 3 раза через {3,}, а не через прописывание в лоб:
Код: plsql
1.
regexp_like(q.z,'(^|\s)([а-Я]+)(.*)(\2)(.*)(\2)','i')
...
Рейтинг: 0 / 0
16.08.2019, 12:16
    #39850283
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
DshedooElic,

Я больше по вопросу как работает "повтор" в регулярке.
Как правильно задать, что слово должно повторяться в строке 3 раза через {3,}, а не через прописывание в лоб:
Код: plsql
1.
regexp_like(q.z,'(^|\s)([а-Я]+)(.*)(\2)(.*)(\2)','i')



Ну так и указывай, что должно повторяться:

regexp_like(q.z,'(^|\s)([а-Я]*)\s.*((\2.*){2})','i')

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with q(z) as (select 'Повторение 2 раза раза' from dual union all
select 'Повторение 1 раз' from dual union all
select 'Повторение повторение 2-3 раза раза раза' from dual union all
select 'Повторение повторение раза 2-3 раза раза' from dual union all
select 'повторение повторение z повторение повторение 4 раза раза раза раза' from dual
)

select q.* from q
where regexp_like(q.z,'(^|\s)([а-Я]*)\s.*((\2.*){2})','i')
...
Рейтинг: 0 / 0
16.08.2019, 12:20
    #39850285
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
DshedooКак правильно задать, что слово должно повторяться в строке 3 раза через {3,}, а не через прописывание в лоб:Никак.
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select regexp_substr('Я больше по вопросу как работает "повтор" в регулярке.
  2  Как правильно задать, что слово должно повторяться в строке 3 раза через {3,}, а не через прописывание в лоб:', '(\w{2})(.*\1){2,}', 1, 1, 'n', 1) from dual;

RE
--
по

...
Рейтинг: 0 / 0
16.08.2019, 12:20
    #39850286
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
DshedooElic,

Я не особо вникал в эту обработку, так накидал по-быстрому.
Если юзать лень, то с повторами дичь (на первый взгляд) происходит.
Можете подсказать, почему так? Или послать куда читать.Тут достаточно не читать, а подумать.

Для того, чтоб найти повтор, ругулярка может быть описана так
слово ораниченное разделителями + произвольная последовательность символов + то же самое слово ораниченное разделителями
и учесть что слово может быть в начале или в конце строки.

Код: plsql
1.
2.
3.
4.
5.
with q(z) as (select 'aaa bbb ccc ddd aaa' from dual union all
select 'aa bbaabb cc' from dual union all
select 'koko okok tutu ko' from dual union all
select 'koko ruru koko tata' from dual)
select regexp_substr(q.z,'(^| )(\S+) .* \2( |$)',1,1,'','2') x from q;
...
Рейтинг: 0 / 0
16.08.2019, 12:21
    #39850287
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
DshedooDshedooКакНу так иКлона забыл включить?
...
Рейтинг: 0 / 0
16.08.2019, 12:27
    #39850291
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Кобанчег,

Найти 1 повтор - это как раз прописывание в лоб: *что-то*+*похрену_что*+*опять_что-то*.
...
Рейтинг: 0 / 0
16.08.2019, 12:29
    #39850292
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
DshedooКак правильно задать, что слово должно повторяться в строке 3 раза через {3,}, а не через прописывание в лоб
Код: plsql
1.
2.
3.
4.
5.
with q(z) as (select 'aaa bbb ccc ddd aaa yo aaa blabla' from dual union all
select 'aa bbaabb cc' from dual union all
select 'koko okok tutu ko' from dual union all
select 'koko ruru koko tata' from dual)
select regexp_substr(q.z,'(^| )(\S+) (.* \2( |$)){2}',1,1,'','2') x from q;


Если надо не хотя бы три раза а ровно три раза, необходимо дополнить регулярку, чтоб покрывала до конца строки.
...
Рейтинг: 0 / 0
16.08.2019, 12:33
    #39850294
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
Dshedoo,

Тебе намекалось, что твоя регулярка (вот эта 21950776 ) вообще в корне неправильная.
Перед использованием like покури лучше substr, чтоб видеть, что попадает под шаблон.
...
Рейтинг: 0 / 0
16.08.2019, 12:35
    #39850295
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярки(2)
КобанчегDshedooКак правильно задать, что слово должно повторяться в строке 3 раза через {3,}, а не через прописывание в лоб
Код: plsql
1.
2.
3.
4.
5.
with q(z) as (select 'aaa bbb ccc ddd aaa yo aaa blabla' from dual union all
select 'aa bbaabb cc' from dual union all
select 'koko okok tutu ko' from dual union all
select 'koko ruru koko tata' from dual)
select regexp_substr(q.z,'(^| )(\S+) (.* \2( |$)){2}',1,1,'','2') x from q;


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

А не дёрнет ли другое множество?

Например, "повтор[1] повтор[2] повтор[3] повтор[4]"
Не вернёт ли тру на 3 повтора, проверив "повтор[2] повтор[3] повтор[4]"?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / регулярки(2) / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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