Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

Открыть новую тему     Написать ответ в эту тему

leftMIND

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
   Регулярные выражения
Обучающий материал
  • Книги    
  • Шпаргалки: от AZJIO (AutoIt3, PCRE) от Dave Child
  • wikipedia.org - Регулярные выражения на wiki  
  • edlinsoft.blogspot.com - Регулярные выражения в .NET Framework  
  • php.ru - Синтаксис регулярных выражений  
  • php.net - Синтаксис регулярных выражений  
  • regexpstudio.com - Регулярные выражения для Delphi  
    Официальные источники:
  • docs.notepad-plus-plus.org - Официальный источник Notepad++ (англ. яз.)  
  • pcre.org - Официальный справочник движка PCRE (англ. яз.)  

  •    Тестирование регулярных выражений
    Программы
    Онлайн сервисы
  • RegexBuddy - крутая и платная  
  • RegExp - бесплатно, AZJIO, PCRE, AutoIt3  
  • Expresso  
  • The Regex Coach  
  • RegExstar, Github (AutoHotKey, PCRE)
  • Обзор программ от ManHunter    
  • regexr.com здесь в Community множество готовых регулярных выражений  
  • pagecolumn.com - для javascript  
  • pagecolumn.com - для php  
  • cuneytyilmaz.com - для javascript  
  • php-include.ru - на флеш-плеере  
  • regex101.com  
  • easyregexp.ru  
  • debuggex.com - показывает структурно  

  •    Схожие темы
  • javascript регулярные выражения
  • PHP: Регулярные выражения (RegExp, Regular, eregi, preg)
  • Игра - Регулярно выражайтесь!
     
    первое сообщение темы...
    Обсуждение шапки данной темы ведётся в этой теме
    Рекомендации по составлению вопросов в данной теме:

  • Всего записей: 33 | Зарегистр. 07-04-2002 | Отправлено: 23:55 15-10-2002 | Исправлено: AZJIO, 15:18 12-02-2021
    totnetot



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO

    Цитата:
    но не стало заменять вообще

    Я заметил что программа очень чувствительна к опциям ToolBox-Options. Что-нибудь не то нажмёшь и все не работает.

    Цитата:
    Ещё намётки для своей проги - вставка в окна поиска  стандартных редакторов, например в Notepad++, то есть нажал кнопку, прога проверила запущенные процессы, нашла редактор и по приоритету вызвала диалог поиска и заполнила поля, с активацией окна наверх. Аналогично и сграбливание, то есть захват регвыра из открытого окна поиска.  

    Прикольная функция будет. Например пишешь в редакторе регулярку и если что-то не получается - нажимаешь хоткей и все переезжает в программу.
     
    Неплохо было бы такие-же кнопочки как в ToolBox (RegExstar) сделать. Я уже сам хочу поломать этот RegExstar чтобы все эти кнопочки были в основном окне.  
     
    Еще в таблице символов можете сделать чтобы по клику на выбранном символе - он вставлялся в поле регулярного выражения в место текущего расположения курсора.
     

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 02:56 12-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    totnetot
    Обновил RegExp 4 раза.
    Добавил ком-строку, новый параметр -n:
    Добавлена вставка и захват регвыр из окна поиска и замены 3-х редакторов
    Поверх всех окон. Добавил справку.

    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 11:16 13-08-2018 | Исправлено: AZJIO, 01:20 15-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    totnetot
    По поводу панели я помню но лень. Я ведь там сделал уже меню. Если тебе вставить \w то тут два символа напечатать,  я привык вводить, но некоторые конструкции например (?<=...) не мог запомнить то направление стрелки забуду <> то что первым = или стрелка, поэтому для тех вещей делал менюшку напоминалку, которая кстати под себя может быть изменена и ещё я забывал [А-яЁё] или [а-ЯЁё], вот тут да, тоже в напоминалку, ну а также я добавил захват из таблицы символов, если диапазон или символ надо выбрать особый, так что всё учтено в плане вставки.
    Также зачем вставлять символ из списка по кнопке Т? Его можно впечатать, а для особых случаев из таблицы символов, она повторяет от 0-127.
     
    Попробовал с ank посмотреть код, и даже сделал чёрную тему подсветки в Notepad++, используя белую, но в итоге ничего не понял, код не воспринимается практически.

    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 20:47 16-08-2018 | Исправлено: AZJIO, 21:23 16-08-2018
    totnetot



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    RegExp и RegExstar программы взаимозаменяемые на 95%. Но есть некоторые моменты. Например я не понял можно ли в RegExp (по сути в AutoIt) явно указать многострочный / однострочный поиск? Например в AHK для этой цели есть специальные опции.
    Например в AHK:  
    .* находит только 1 строку от начала до конца
    s).* находит весь многострочный текст
    Описание опции s
     
    Исходя из этих отличий получается что для разных ситуаций придётся использовать разные инструменты, либо разобраться в небольшом количестве тонкостей.
     
    Я переделал RegExstar tnt для более быстрой работы с ним. В основном перепахал только GUI но и так по мелочи немного. Есть идеи как его дальше усовершенствовать.
    Скачать
     
    Кстати при таком расположении кнопок-сниппетов легко выучить впередистоящие и сзадистоящие группы. Так же на кнопках-сниппетах есть подсказки.
     
    Выявленные ошибки в RegExstar tnt:

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 04:04 17-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    totnetot

    Цитата:
    .* находит только 1 строку от начала до конца
    s).* находит весь многострочный текст  

    флаг (?s) меняет значение точки, то есть .* это даже аббревиатура s-строка, m-многострочная_строка. Флаг s воспринимает текст как строку, то есть в нем нет переносов, символы переноса являются всего лишь обычными символами и флаг s работает с текстом как с одной строкой. Флаг m работает с текстом как много строк, меняются значения точки и  начала/конец строки.
    Если ты хочешь чтобы (.+?) работало на каждой строке, то есть не могло захватить 2 и более строк, то ставишь флаг (?m), тогда ты не заботишься о том чтобы точка не содержала перенос строк, то есть не делаешь ([^\r\n]+?).
    А если хочешь чтобы точка захватывала всё подряд без исключений, то ставишь флаг (?s)

    Цитата:
    .* находит только 1 строку от начала до конца

    Это работает в правильно логике, дошла до первого переноса строки и оборвала шаблон. Так и было задумано. Как выбрал то и получил. Если это работает не так, значит в опциях движка PCRE допустим что-то включили по умолчанию, когда компилировали программу. То есть поведение программ с одним и тем же движком может отличаться. Допустим в новой версии AutoIt3 чтобы вернуть старое поведение нужно явно указать что является переносом строки. Допустим перенос может быть CR, LF или CRLF или любая из этих комбинаций, то есть как и в Notepad++ ты задаешь что у тебя является переносом строк, юникс формат или мак или виндос

    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 14:37 17-08-2018 | Исправлено: AZJIO, 14:44 17-08-2018
    totnetot



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Указал в шапке что шпаргалка для AutoIt3, PCRE.  
    Разобрался немного в отличиях синтаксиса AutoIt3 и AHK. По сути флаги одни и те же, только обозначаются в теле регулярок разными способами. Но вроде есть и другие отличия.  
     
    Добавлено:
    Можно конечно сделать переключатель синтаксиса. Но для 100% совместимости нужно к самой программе подключать внешний модуль работающий на другом языке, который будет принимать результаты на вход и возвращать назад результаты выполнения обработки.
    Но имхо не стоит оно того. Уже есть свои программы под каждый случай.

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 17:32 17-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    totnetot

    Цитата:
    Указал в шапке что шпаргалка для AutoIt3, PCRE.
    Синтаксис (?s) не является принадлежностью AutoIt3. Открой в шапке PCRE найди поиском (?i) и чуть выше описание флагов

    Цитата:
      i  for PCRE_CASELESS
      m  for PCRE_MULTILINE
      s  for PCRE_DOTALL
      x  for PCRE_EXTENDED

    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 06:42 18-08-2018
    totnetot



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO я это уже понял. Речь идёт о том, что к этому PCRE в разных языках практикуется разный подход. Эти флаги указываются разными способами. Лучше об этом все таки знать.

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 16:00 18-08-2018
    Petrik_Pjatochkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, плиз.
    Мне нужно найти повторяеямую последовательность символов. Как это можно сделать?
     
    Для примера, для простоты один символ.
     
    Я знаю как это прописать для идущих подряд символов с помощью мультипликатора +. А если символ повторяется через n-е количество других символов?
     
    Пример 1, найти "a" повторяемое через один символ. Эти строки должны быть найдены:
    akast
    dfka7a
    kka a bb
     
    Пример 2, найти "5" повторяемое через два символа. Эти строки должны быть найдены:
    ава5дб544
    5 2517
     
    Идея понятная думаю Это только примеры с одним символом. В более общем виде задача: искать заданную n-ую последовательность символов, повторяемую (хотя бы один раз) через любое количество любых символов.

    Всего записей: 689 | Зарегистр. 04-12-2007 | Отправлено: 14:11 22-08-2018 | Исправлено: Petrik_Pjatochkin, 14:30 22-08-2018
    sikemo

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1
    а.a
     
    2
    5..5
     
    если требует обратится к строке, то заключить в скобки (а.a), (5..5)
     
    точка отвечает любому символу, поэтому не усложнял [конструкцию]

    Всего записей: 1326 | Зарегистр. 27-11-2008 | Отправлено: 15:28 22-08-2018
    Petrik_Pjatochkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sikemo
    Спасибо за участие, конечно, но это были примеры чтобы объяснить идею.
    Я просто не очень ясно сформулировал задачу. Задача в том чтобы находить повторяющиеся символы когда промежуток между ними является произвольным (любым).
     
    Когда задана последовательность символов, которую нужно искать, то это сделать лего. Напрмер: /abc.*abc/ найдет строки с повторяюимся "abc".
     
    Мне нужно находить строки где повторяются последовательности символов, причем эти последовательности изначально не заданы. Например найти строки где повторяются три символа. То есть нужен регэксп который найдет:
    abclmvsabckjl - повторяется "abc"
    kjl123df82123dfl - повторяется "123"
    453 aдло583 a8ыа - повторяеся "3 a"
    и тд: строки с любыми тремя символами, которые повторяются.
     
    Но это наверное я сильно много хочу от простого рэгэксп запроса.

    Всего записей: 689 | Зарегистр. 04-12-2007 | Отправлено: 16:04 22-08-2018 | Исправлено: Petrik_Pjatochkin, 16:05 22-08-2018
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Petrik_Pjatochkin

    Цитата:
    Но это наверное я сильно много хочу от простого рэгэксп запроса.

    Не очень много... просто перед тем, как получить решение, необходимо сформулировать задачу.
    Если Вас интересует механика работы регэкспов, то рекомендую почитать Джеффри Фридл "Регулярные выражения" (ссылка в шапке). В ней доступно, подробно и достаточно полно описываются регулярные выражения.
     
    Если интересует конкретный пример:

    Цитата:
    нужен регэксп который найдет:  
    abclmvsabckjl - повторяется "abc"  
    kjl123df82123dfl - повторяется "123"  
    453 aдло583 a8ыа - повторяеся "3 a"  
    и тд: строки с любыми тремя символами, которые повторяются.

    шаблон будет таким:

    Код:
    ^.*(abc|123|3 a).*\1.*$

    для всех трех строк сразу.
    если же требуется именно так:

    Цитата:
    с любыми тремя символами

    то:

    Код:
    ^.*(...).*\1.*$

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:42 22-08-2018 | Исправлено: YuS_2, 17:46 22-08-2018
    Petrik_Pjatochkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2

    Цитата:
    ^.*(...).*\1.*$  

    Спасибо этот шаблон работает. Я не знал про \1.
     
    У меня следующий вопрос. Я хочу удалить первый набот символов, котоый совпал. Я делаю так
    Найти: (^.*)(...)(.*)(\1)(.*$)
    Заменить:  $1$3$4$5
     
    Но этот шаблон поиска не работает. Он находит всё (т.е. строки котоые содержат повторения и которые не содержат) и замена просходит как-то криво.
     
    Если прописать шаблон так: (^.*)((...))(.*)(\1)(.*$)
    Этот тоже находит всё, но замена не происходит вообще.
     
    ***
     
    Или проще
     
    Найти: (^.*)(...)(.*\1.*$)
    Заменить: $1$3
     
    Но это без разницы. Всё равно не работает.

    Всего записей: 689 | Зарегистр. 04-12-2007 | Отправлено: 18:40 22-08-2018 | Исправлено: Petrik_Pjatochkin, 18:43 22-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Petrik_Pjatochkin
    для первого поста регвыр
    (?m)(\w)(?:.\1)++
     

    Цитата:
    Мне нужно находить строки где повторяются последовательности символов
    обычно строку прогоняют на разную ширину слова и за каждым символом. Также вести учёт результатов - рейтинг наибольшего числа вхождений
     

    Цитата:
    Всё равно не работает.
    программа поддерживает ссылки на группы в поле замены?

    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 18:52 22-08-2018 | Исправлено: AZJIO, 19:01 22-08-2018
    Petrik_Pjatochkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    (?m)(\w)(?:.\1)++  

    Круто, а что?
     
    Ни один текстовый редактор на этот шаблон не среагировал. Я попробовал 3 шт.
    Наверное нужен како-то специальный движок для этого.

    Всего записей: 689 | Зарегистр. 04-12-2007 | Отправлено: 19:01 22-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Petrik_Pjatochkin

    Цитата:
    Ни один текстовый редактор на этот шаблон не среагировал. Я попробовал 3 шт.
    Наверное нужен како-то специальный движок для этого.


    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 19:04 22-08-2018
    Petrik_Pjatochkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    программа поддерживает ссылки на группы в поле замены?

    Да, конечно.
    Проблема не в группах замены, а в том что находится абсолютно все строки содержащие и не содержащие повторения.
    Проверяю на нескольких редакторах: EditPad, Sublime, CudaText, Akelpad

    Всего записей: 689 | Зарегистр. 04-12-2007 | Отправлено: 19:06 22-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Petrik_Pjatochkin
    Могу сказать одно, если шаблон найден, то группы все есть, хотя они могут быть пустыми, но такая ситуация может быть для (...)? то есть группа под вопросом, то есть может быть а может не быть, когда ситуация "не быть" то группа пустая. В остальных случаях должна быть замена на то что в группах. Это элементарно... не заменить может если не найдено, а как это так найдено, а заменить не может, не важно чем...

    Цитата:
    Проверяю на нескольких редакторах: EditPad, Sublime, CudaText, Akelpad
    всеми четырмя не пользуюсь

    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 19:12 22-08-2018 | Исправлено: AZJIO, 19:14 22-08-2018
    Petrik_Pjatochkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Приколько, программа называется "RegExp", это все равно что назвать марку машины "Машина"
    Сейчас попробую скачать и проверить, но мне бы желательно решение чтобы работало в текстовых редакорах.
     
    Добавлено:

    Цитата:
    Могу сказать одно, если шаблон найден, то группы все есть, хотя они могут быть пустыми

     
    Проблема именно в группировках. Потому что шаблон ^.*(...).*\1.*$ ищет правильно, т.е. только строки в которых есть повторения.
     
    А если сгруппировать  (^.*)(...)(.*\1.*$) , то в этом случае находятся все строки, т.е. ошибка в шаблоне.

    Всего записей: 689 | Зарегистр. 04-12-2007 | Отправлено: 19:14 22-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    но мне бы желательно решение чтобы работало в текстовых редакорах

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

    Цитата:
    А если сгруппировать  (^.*)(...)(.*\1.*$) , то в этом случае находятся все строки, т.е. ошибка в шаблоне.
    если не ошибся в количестве открытых и закрытых скобок, то шаблон не должен выдавать ошибку, если шаблон найден, то группы это всего лишь набор символов взятый из найденного шаблона и их комбинация может быть любой даже невозможной и она не вызовет проблемы. Метасимволы границ (^$) можно не помещать внутрь группы, хотя и не вызовет ошибки.

    Всего записей: 4404 | Зарегистр. 03-05-2006 | Отправлено: 19:23 22-08-2018 | Исправлено: AZJIO, 19:32 22-08-2018
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru