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

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

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

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

Код: 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
регулярки(2)
    #39850201
nemlicat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoo,
Спасибо большое Вам!
...
Рейтинг: 0 / 0
регулярки(2)
    #39850202
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
'[^\s]'

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

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

Я больше по вопросу как работает "повтор" в регулярке.
Как правильно задать, что слово должно повторяться в строке 3 раза через {3,}, а не через прописывание в лоб:
Код: plsql
1.
regexp_like(q.z,'(^|\s)([а-Я]+)(.*)(\2)(.*)(\2)','i')
...
Рейтинг: 0 / 0
регулярки(2)
    #39850283
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
регулярки(2)
    #39850285
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
регулярки(2)
    #39850286
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
регулярки(2)
    #39850287
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooDshedooКакНу так иКлона забыл включить?
...
Рейтинг: 0 / 0
регулярки(2)
    #39850291
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег,

Найти 1 повтор - это как раз прописывание в лоб: *что-то*+*похрену_что*+*опять_что-то*.
...
Рейтинг: 0 / 0
регулярки(2)
    #39850292
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
регулярки(2)
    #39850294
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Тебе намекалось, что твоя регулярка (вот эта 21950776 ) вообще в корне неправильная.
Перед использованием like покури лучше substr, чтоб видеть, что попадает под шаблон.
...
Рейтинг: 0 / 0
регулярки(2)
    #39850295
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег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
25 сообщений из 28, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / регулярки(2)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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