АвторСообщение



Пост N: 2
Зарегистрирован: 16.09.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.09.11 20:19. Заголовок: Регулярные выражения


Доброе время суток!
Не могу разобраться с регулярными выражениями. Если не сложно, напишите здесь примеры каких нибудь полезных регулярных выражений... Заранее благодарю!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 57 , стр: 1 2 3 All [только новые]





Пост N: 82
Зарегистрирован: 09.04.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.09.11 22:17. Заголовок: Думаю, рациональнее ..


Думаю, рациональнее всего бы было перенести тему в справочный раздел, ибо тема действительно интересна и обширна.
Как-то я, например, долго подбирал регулярку на поиск глав по цифрам, но так ничего путно и не получилось, плюнул, и переименова все главы из "1" в "глава 1"


Спасибо: 1 
ПрофильЦитата Ответить
Разработчик




Пост N: 120
Зарегистрирован: 02.10.06
Откуда: РФ, Санкт-Петербург
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.09.11 14:49. Заголовок: Пожалуй, теорию я ту..


Пожалуй, теорию я тут расписывать не буду, этого добра при желании в интернете можно найти много. Начать стоит хотя бы со странички на википедии.

Что касается практики, то приведу несколько примеров:

чтоб далеко за примером не ходить, начнем с поиска глав =)


пример (главы по цифрам с точкой или без точки):
 1. 
текст текст текст текст~
~текст текст текст текст.

2.
текст текст текст текст~
~текст текст текст текст.

3.
текст текст текст текст~
~текст текст текст текст.


шаблон:

^ *\d+\.?$

"^" - поиск начинается с начала строки
" *" - пробелы в начале строки, если они есть
"\d+" - одна или несколько цифр идущих подряд
"\.?" - если после цифр есть точка, включаем и ее тоже
"$" - конец строки



пример (цифры с точкой + название главы):
 
1. ДОЛГОЖДАННЫЙ ПРИЕМ
текст текст текст текст~
~текст текст текст текст.

2. ТЕНЬ ПРОШЛОГО
текст текст текст текст~
~текст текст текст текст.

3. ТРОЕ - ЭТО КОМПАНИЯ
текст текст текст текст~
~текст текст текст текст.


шаблон:
^ *\d+\..*$

"^" - поиск начинается с начала строки
" *" - пробелы в начале строки, если они есть
"\d+" - одна или несколько цифр идущих подряд
"\." - точка
".*" - что угодно (все символы сколько их есть до конца строки "$")
"$" - конец строки


Пример (пустая строка + название главы + пустая строка):

  Глас рассудка I 

текст текст текст текст~
~текст текст текст текст.

Ведьмак

текст текст текст текст~
~текст текст текст текст.

Глас рассудка II

текст текст текст текст~
~текст текст текст текст.


Шаблон:
\r\n\r\n.{1,50}\r\n\r\n

"\r\n\r\n" - Cимволы перевода строки (CR LF). Два перевода подряд (CR LF CR LF) = пустая строка
".{1,50}" - Название главы (строка не более 50 любых символов)
"\r\n\r\n" - Символы перевода строки (CR LF). Два перевода подряд (CR LF CR LF) = пустая строка
т.е. шаблон ищет строку не более чем в 50 символов, отделенныю от остального текста пустой строкой сверху и снизу.

Примечание: при поиске глав все найденные символы новой строки и пробелы по краям потом удаляются из тэга автоматически, так что можно не заморачиваться с дополнительными шаблонами поиска строк перед и после основного шаблона (вроде "(?<=\r\n\r\n).{1,50}(?=\r\n\r\n)" )



Что касается использования регулярных выражений в словарях, то см, например, тему про омографы...
Для экспериментов можно использовать служебное окно отладки словарей в режиме "RegEx", открывающееся через редактор словарей:
Скрытый текст



Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 12
Зарегистрирован: 22.08.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.09.11 19:17. Заголовок: Если нет много време..


Если нет много времени чтобы составить словарь можно начать с простейших выражений типа
(?i)(?<=(ают|гие|дние|жие|кие|нние|рил|тал|хие|шие|шние|щие|ые).{0,5})\bсектора\b = сектора<
(?i)(?<=(али|ать|ают|гие|гли|дние|дул|ены|жие|ись|ите|ить|кие|хие|шие|шние|щие|ые).{0,5})\bсвечи\b = све<чи
и такие в окончания подходят для большинства омографов, но и такой простой поиск поможет избавиться от большинства ошибок при произношении того или иного слова, я на работе в течении дня слушая книгу записываю где он неправильно произносит, а вечером добавляю в словарь.
пы.сы жаль нет поиска по тексту приходится искать в другой программе.
вот словарь замены правда он еще не идеален
click here

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 9
Зарегистрирован: 29.03.13
Рейтинг: 0
ссылка на сообщение  Отправлено: 27.04.13 01:57. Заголовок: MoppoH пишет: (?i)..


MoppoH пишет:

 цитата:

(?i)(?<=(али|ать|ают|гие|гли|дние|дул|ены|жие|ись|ите|ить|кие|хие|шие|шние|щие|ые).{0,5})\bсвечи\b = све<чи


Всем привет.
Уже всю голову сломал, не понимаю...
Вот ваше мнение какое?? Вы думаете это выражение будет реально работать??
Ну вот сами посмотрите.. на это выражение вываливается ошибка - видимо шаблон али|ать|ают и т.д. нельзя брать в скобки, т.е. группировать...
Единственный способ, который у меня получился - это выражение такого типа:
(?<=али|шие|шние|щие|ые)\b.{0,30}свечи\b
и для анализируемой строки догарали наши свечи
решение будет вида догарали наши свечи, причем вместе с пробелом тут можно посмотреть результат.
и далее, если рег. выражение будет такого типа
(?<=али|шие|шние|щие|ые)\b.{0,30}свечи\b = све<чи, то мы благополучно заменим найденное выражение
наши свечи на выражение све<чи и
итогом будет не строка догарали наши све<чи, а строка догарали све<чи
Может кто знает, решается ли вообще эта задача по поиску конкретного слова (свечи) в зависимости от предшествующего контекста (окончания определений для слова свечи)?


В поисках рая.. Спасибо: 0 
ПрофильЦитата Ответить
Разработчик




Пост N: 222
Зарегистрирован: 02.10.06
Откуда: РФ, Санкт-Петербург
Рейтинг: 0
ссылка на сообщение  Отправлено: 27.04.13 14:43. Заголовок: odinokiyklaus пишет:..


odinokiyklaus пишет:

 цитата:
Ну вот сами посмотрите.. на это выражение вываливается ошибка - видимо шаблон али|ать|ают и т.д. нельзя брать в скобки, т.е. группировать...


Смотря где...

Сущестуют различные реализации интерпретаторов регулярных выражений, и у каждой могут быть небольшие отличия и особенности.
Онлайн сервис по вашей ссылке предназначен для тестирования выражений в среде языка Ruby. В нем, как и во многих других интерпретаторах регулярных выражений, поддержка look-behind ограниченная: результтат внутри (?<=...) всегда должен быть фиксированной длинны, а это значит, что "*", "+", "{x,y}" и прочие квантификаторы для неизвестного количества повторов, а так же варианты различной длинны, разделенные символом "|" недопустимы.

В KooBAudio используется движок регулярных выражений, встроенный в .NET Framework. Он полностью поддерживает все возможности синтаксиса внутри look-behind групп, и такое выражение будет работать.

Для проверки есть встроенная опция "Меню Словари->отладка словарей->RegEx" или кнопка с увеличительным стеклом в панели инструментов редакора словарей. В последней версии как раз она была усовершенствована для удобства работы с рег.выражениями в редакторе.

Есть простой режим проверки рег выражений.
Скрытый текст


В режиме проверки словарей все устроено вот как:
Скрытый текст



Спасибо: 1 
ПрофильЦитата Ответить
Разработчик




Пост N: 223
Зарегистрирован: 02.10.06
Откуда: РФ, Санкт-Петербург
Рейтинг: 0
ссылка на сообщение  Отправлено: 27.04.13 15:44. Заголовок: P.S. Свои словари вы..


P.S.
Свои словари выложу как-нибудь позже, все никак руки не дойдут окончательно рассортировать и привести их в порядок...


Вот еще пара советов с примерами использования регэксов в словарях:


Не обязательно всегда использовать .{0,x}. Если словосочетание более-менее конкретное, можно использовать конструкции типа ( \w+)? для возможного одного слова между ключевым словом и омографом...
(?i)(?<=\b(?:дай|дать|дал|дала|дают|давал|давала|давали) (?: \w+)?)воды\b=воды<



Кроме поиска вперед/назад в группах (?<=...) (?=...) можно так же иногда использовать обратную связь, чтобы вставить содержимое группы в результат замены, например:
(?i)\bстоящ(ий|ая|ему|ей|его|юю|ем|ей|ими)(?= (рядом|неподалеку|около|возле|за|под|у)\b)=стоя<щ$1
$1 будет заменен на результат группы 1 (ий|ая|ему|ей|его|юю|ем|ей|ими)


(?i)\b(замк[ауиео])(х|м|ми|в)?\b(?=[^\r\n\.\?\!]{0,40}(?:откры|отпер|запер|взл[оа]м|вскры|висяч|навесн|ржав|амбарн|хитроумн|хлипк|щелкнул|ключ|двер))=$1<$2
$1 вставит результат (замк[ауиео])
$2 - результат (х|м|ми|в)?


Номера групп присваиваются автоматически, начиная с 1, слева направо. Группы, к которым не нужно потом обращаться рекомендуется обьявлять с ключем ?: (?:шаблон) - для таких групп обратная связь не создается, и они пропускаются при нумерации. Это так же немного ускорит обработку правила. При большом кол-ве правил со обилием группировок это может дать заметный прирост производительности.

В сложных выражениях с обилием вложенных групп можно использовать именованные группы, чтобы не высчитывать номер нужной группы, а обратиться к ней по имени.
(?i)\b(?<начало>замк[ауиео])(?<окончание>х|м|ми|в)?\b(?=[^\r\n\.\?\!]{0,40}(?:откры|отпер|запер|взл[оа]м|вскры|висяч|навесн|ржав|амбарн|хитроумн|хлипк|щелкнул|ключ|двер))=${начало}<${окончание}



Использование обратных связей для омографов в правилах вида
(?i)((али|ать|ают|гие|гли|дние|дул|ены|жие|ись|ите|ить|кие|хие|шие|шние|щие|ые).{0,30}))\bсвечи\b=$1све<чи

Теоретически возможно, но НЕ рекомендуется. Т.к. правило зарезервирует весь соответствующий текст, и прочие правила не смогут его обработать. Например, правило
догарали=>догара<ли
Будет отсеяно в тексте "догарали наши свечи", т.к. слово уже зарезервировано правилом для омографа...

В общем, для таких правил, лучше использовать поиск вперед/назад в (?<=...) (?=...) с ними резервируется только "нужное" слово, а окружающий текст может быть потом обработан другими правилами.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 68
Зарегистрирован: 22.08.11
Рейтинг: 1
ссылка на сообщение  Отправлено: 27.04.13 23:06. Заголовок: На самом деле там вс..


На самом деле там все достаточно просто
1 если ищешь только по окончанию то регулярное выражение выглядит примерно так:
(?i)(?<=(а(ли|ть|ют)|(г|дн|ж|к|х|хн|ш|шн|щ)ие|дел|ены|жит|иеся|или|ить|кины|лил|лись|няли|рил|рыл|сал|тся|шую|ые|ыть)\b.{0,5})\bокна\b
(г|дн|ж|к|х|хн|ш|шн|щ)ие это чтобы не писать отдельно гие|дние| и так далее
\b это чтобы искало только в окончание, \b ставит границы слова
.{0,5} количество символов перед этим словом
\bокна\b так же с границами чтобы не искало слова окнами или корень окна в других словах

2 если ищет окончания после нужного слова
(?i)\bвсе\b(?=[^\.,!?\b-\b]{0,15}(вало|дило|ейно|ело|ено|зано|ивое|ишь|кало|комо|лось|льно|мал|ойно|ояло|нее|нно станет|тите|ький|ясно)\b)
\bвсе\b опять же границы слова
[^\.,!?\b-\b] чтобы не искало если есть между словами точки, запятые, воск знаки, и тире
|комо|лось|льно| окончания слов для слова всё
)\b) чтобы искало только окончания

3 по поиску слов если есть и другие слова между ними
(?i)(?<=(бледне(ют|ли)|гор(ели|ят)|неме(ли|ют)|ожег|раздул|раст(ер|ир)|\bтер\b|тер(ла|ли)|(вы|рас)тер|щекотал)[^\.,!?\b-\b]{0,30})\bщеки\b
бледне(ют|ли)|гор(ели|ят) корень один но окончания разные
[^\.,!?\b-\b] чтобы не искало если есть между словами точки, запятые, воск знаки, и тире
{0,30} количество символов между словами
\bщеки\b ограничение слова

пы.сы. отдельное спасибо за подсказку с группами

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 13
Зарегистрирован: 29.03.13
Рейтинг: 0
ссылка на сообщение  Отправлено: 08.05.13 11:53. Заголовок: MoppoH пишет: На са..


MoppoH пишет:

 цитата:
На самом деле там все достаточно просто
1 если ищешь только по окончанию то регулярное выражение выглядит примерно так:
(?i)(?<=(а(ли|ть|ют)|(г|дн|ж|к|х|хн|ш|шн|щ)ие|дел|ены|жит|иеся|или|ить|кины|лил|лись|няли|рил|рыл|сал|тся|шую|ые|ыть)\b.{0,5})\bокна\b


Может я загоняюсь, но мне кажется всё совсем не так просто..
К примеру вышеприведённое выражение нежизнеспособно.. Поправьте меня, если я ошибаюсь.
Скрытый текст


В поисках рая.. Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 70
Зарегистрирован: 22.08.11
Рейтинг: 1
ссылка на сообщение  Отправлено: 09.05.13 10:52. Заголовок: почему Вы так решили..


почему Вы так решили, будут заменены, разбив(али) окна, разбив(ают) все окна, это можно проверить в отладке проекта в реальном времени. группа (а(ли|ть|ют)) содержит в себе две группы и все окончания на али, ать, ают, будут найдены на растояние 5 букв и пробелов от слова окна
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
Разработчик




Пост N: 229
Зарегистрирован: 02.10.06
Откуда: РФ, Санкт-Петербург
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.05.13 20:43. Заголовок: odinokiyklaus Это ба..


odinokiyklaus
Это баг в окне отладки. При редактировании нижнего поля (текст для проверки) в RegEx режиме автообновление не срабтывает, подсветка остается от предыдущего результата...
В следующей версии будет исправлено, пока же нужно вручную обновалять кнопкой со стрелкой.

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 09.10.06
Рейтинг: 0
ссылка на сообщение  Отправлено: 06.03.14 11:50. Заголовок: движок регулярных выражений


Не подскажете ли, уважаемые, существуют ли текстовые редакторы, поддерживающие все возможности синтаксиса внутри look-behind групп, как движок регулярных выражений, встроенный в .NET Framework?
Или использующие этот движок.
Сильно расширяются возможности автоматизации обработки текстов.

Спасибо: 0 
ПрофильЦитата Ответить
Разработчик




Пост N: 257
Зарегистрирован: 02.10.06
Откуда: РФ, Санкт-Петербург
Рейтинг: 0
ссылка на сообщение  Отправлено: 07.03.14 18:43. Заголовок: panalex Есть редакт..


panalex
Есть редактор DtPad. Написан под .NET 4.0, есть поиск / замена по рег. выражениям.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 09.10.06
Рейтинг: 0
ссылка на сообщение  Отправлено: 10.03.14 12:49. Заголовок: Cminant Спасибо, буд..


Cminant
Спасибо, буду пробовать

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 166
Зарегистрирован: 09.04.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.01.16 01:26. Заголовок: подскажите гуманитар..


подскажите гуманитарию, надо регулярное выражение, чтобы "*го гла<за", но с исключением "его глаза", - по всей моей практике, единственно необходимое регулярное выражение.

Спасибо: 0 
ПрофильЦитата Ответить
Разработчик




Пост N: 302
Зарегистрирован: 02.10.06
Откуда: РФ, Санкт-Петербург
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.01.16 14:19. Заголовок: KOMODOR (?<! ..


KOMODOR
(?<!\bе)го глаза\b

как-то так

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 155
Зарегистрирован: 22.08.11
Рейтинг: 1
ссылка на сообщение  Отправлено: 24.01.16 15:25. Заголовок: #(?i)(?<=(\B..


#(?i)(?<=(\Bего|ого)\b[^\.,!?-]{0,2})\bглаза\b=глазаъ<
я пользуюсь таким, символ \B обозначает что это не конец слова, [^\.,!?-] обозначает что между его и глаза нет запятых и других знаков, \bглаза\b обозначает что будет искать только слово глаза, а не глазастых или Оглазар

но все равно бывают исключения, зрачок его гла<за, закрыл его глаза<

В поисках ада.. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 167
Зарегистрирован: 09.04.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.01.16 20:09. Заголовок: MoppoH порылся в сущ..


MoppoH порылся в существующих словарях регулярных выражений на сайте - нашел несколько правил, которые перекрыли всю необходимую потребность, на все случаи жизни. Да тут, оказывается, все есть, только вручную копаться надо...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 30.04.16
Откуда: ЛНР, краснодон
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.08.16 10:27. Заголовок: MoppoH спасибо за от..


MoppoH спасибо за ответ по словам, и если возможно, прокомментируйте (объясните) выделенное, в частности квадратные скобки:

#(?i)(?<=((а|е|и|о|я)[бнтц]и(е|и|й|ю|я)|тви[еию]|\Bего|нием|ого|асть)\b[^\.,!?-]{0,2})\bбункера\b=бУнкера
#(?i)(?<=([вн]ое|ое|[вщ]ая|ая|инул)\b[^\.,!?-]{0,2})\bбытие\b=бытиё

И внекоторых рег. выражениях добавлен Ъ:

#(?i)(?<=(ая|(ж|к|н)ая|была)\b[^\.,!?-]{0,2})\bбелка\b=бе<лкаъ
#(?i)\bбелка\b(?=[^\.,!?-]{0,30}(колесе))=бе<лка

???


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 5
Зарегистрирован: 24.07.16
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.08.16 22:09. Заголовок: в квадратных скобках..


в квадратных скобках указываются одинарные буквы, при нахождение которых срабатывает рег выражение
в круглых скобках можно указать сочетание букв, при нахождение которых сработает рег выражение
то есть (а|е|и|о|я)[бнтц]и(е|и|й|ю|я) найдет ение, ация
а вот (тут можно написать что именно надо найди до|прис)[бнтц]и(е|и|й|ю|я) найдет присбию, присния

в некоторых случая слова заканчивающиеся на А даже если стоит ударение все равно читает не правильно, а при добавление Ъ уже читает правильно
видимо баг движка

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 75
Зарегистрирован: 29.03.13
Откуда: Санкт-Петербург
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.08.16 23:05. Заголовок: Лично для меня хорош..


Лично для меня хорошим учебником была статья в Википедии и практика в написании выражений.
Я отключил все словари, завел один, включил его и в нем ужен писал правила через notepad++ и в окне отладки словарей смотрел на получившиеся результаты.

[бнтц] - один любой из символов из этого перечня [перечень одиночных символов]
[бнтцоа]{1,2} {1,2}-квантификатор - означает один или два символа из перечня [] - пример цо ба ц б - все подходит
{1,} - один и более (с правой стороны внутри после запятой нет ограничения)
[бнтцоа]+ знак плюс после перечня - не менее одного символа из перечня
[бнтцоа]? знак вопроса после перечня - ноль или один символ из перечня
[^\.,!?-] - любой символ кроме . (точка) , ! ? -
. - знак точки означает вообще любой один символ.
Чтобы написать именно точку её экранируют \. это означает точку
(она|оно|они) - любой вариант в скобках сработает. знак | - означает или
\b - граница слова то есть \bвсе\b - найдет только слово все, а слово всех проигнорирует
\В - середина слова

Это условия поиска по типу если перед словом1 стоит слово2 или слово3, то слово1 будет найдено, а иначе не найдет.
(?<=(слово2 |слово3))слово1
=слово<1 - заменяет найденное слово1 на слово<1 с ударением
пример
(?<=(слово2 |слово3 ))слово1=слово<1 - найдет в выражениях "слово2 слово1" или "слово3 слово1" слово1 и заменит его на слово<1

Не стесняйся эксперементировать и спрашивать! Удачи!


В поисках рая.. Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 57 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 2
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет