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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 89 90 91 92 93 94 95 96 97

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

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
    Petrik_Pjatochkin



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

    Цитата:
    его нет, задача не решаема последовательным движением вперёд за один проход,

    Почему не решаема? Шаблон работает в текстовых редакторах. Например, немного модифицируемый: ^.*(.{3,}).*\1.*$
    правильно находит строки с повторениями от 3 символов и больше. Находит в текстовых редакторах.  
     
    Мне теперь нужно разобраться как правильно сгруппировать. Группировка почему-то не работает, а не сам шаблон.

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



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

    Цитата:
    Ни один текстовый редактор на этот шаблон не среагировал.

    Редактор либо находит либо заменяет, у него нет функции вывода найденных групп.

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



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

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

    (^.*)(...)(.*\1.*$)
    Этот шаблон не выдает ошибку. Шаблон находит все строки, даже просто строку состоящую из трех символов: "123". Я не понимаю почему.

    Всего записей: 771 | Зарегистр. 04-12-2007 | Отправлено: 19:35 22-08-2018 | Исправлено: Petrik_Pjatochkin, 19:37 22-08-2018
    AZJIO



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

    Цитата:
    находит строки с повторениями

    Смотря если поменять ТЗ, то да сразу всё работает. Обычно люди заходят пытаясь не рассказать свою задачу придумывают пример, для которого нет решения, а для его конкретной задачи решение есть, потому что конкретный пример имеет строго заданные параметры что найти и что с этим делать, а общее представление настолько расплывчато, что помогающие ухищряются учесть все возможные комбинации, которых нет в требуемом ТЗ.
    Повторения работают. Поиск повтора неизвестной длины, неизвестсного содержания - не работает.
     
    к примеру из моей проги шаблоны:
    найти повтор слова (?<![^\s\A])([А-яЁё]+)[\h]+\1
    удалить повтор слова (?<![А-Яа-яЁё])([А-Яа-яЁё]+) \1( |.) заменить на \1\2
    двойная заглавная буква [A-ZА-ЯЁ]{2}[A-Za-zА-Яа-яЁё]{0,15}
    удалить повтор строк '([^\R]+?)(\R+)(\1\R+)+'

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ЛОЛ я понял
    (^.*)(...)(.*\1.*$)
    В этом шаблоне \1 относится к первой группе, т.е. к (^.*) , а не к (...)

    Всего записей: 771 | Зарегистр. 04-12-2007 | Отправлено: 19:50 22-08-2018 | Исправлено: Petrik_Pjatochkin, 19:51 22-08-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Petrik_Pjatochkin
    группы - моё писание
    используй (?:...) чтобы не было её номера как 1

    Всего записей: 4543 | Зарегистр. 03-05-2006 | Отправлено: 19:53 22-08-2018 | Исправлено: AZJIO, 19:55 22-08-2018
    YuS_2



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

    Цитата:
    Но это без разницы. Всё равно не работает.


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

    Регулярные выражения не следует изучать методом научного тыка. При составлении шаблона необходимо точно знать, как работает каждый элемент шаблона. Попробуйте разобрать, что именно за шаблон Вы составили.
    Приличные редакторы вообще не должны находить какое-либо совпадение по такому шаблону
    \1 - обратная ссылка на группу номер 1, у Вас это (^.*), т.е по сути, начало строки за которым следуют ноль или более любых символов, за которыми сразу следуют три любых символа (группа №2) и т.д.
    В общем, почитайте литературу, прежде чем пользоваться инструментом регвыров...
     
    Добавлено:

    Цитата:
    ЛОЛ я понял  
    (^.*)(...)(.*\1.*$)  
    В этом шаблоне \1 относится к первой группе, т.е. к (^.*) , а не к (...)

    Ну, вот... Вы и сами всё прекрасно разобрали, оказывается
    Тем не менее, это:

    Цитата:
    Регулярные выражения не следует изучать методом научного тыка.

    всё равно актуально...
     
    Составьте задачу, а потом уже можно будет подумать как её решать...
    Гипотетические примеры, в конкретных случаях помогают нечасто, но они помогают при условии достаточно глубокого понимания механики работы регэкспов.

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 20:54 22-08-2018
    sikemo

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

    Цитата:
    (^.*)(...)(.*\1.*$)  
    Этот шаблон не выдает ошибку. Шаблон находит все строки, даже просто строку состоящую из трех символов: "123". Я не понимаю почему.

     
    так здесь, из ТЗ-решения, предполагается НЕ пустая группа/подстрока [с ней будет идти сравнение], а это возвращает вас в условие ПРАВИЛЬНО ФОРМУЛИРОВАТЬ ПОСТАНОВКУ ЗАДАЧИ  
     
    ---
    Игра - Регулярно выражайтесь!

    Всего записей: 1327 | Зарегистр. 27-11-2008 | Отправлено: 22:21 22-08-2018 | Исправлено: sikemo, 22:37 22-08-2018
    totnetot



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добавил в шапку ссылку на игру.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    totnetot
    А зачем играть, разве нет практичных задач? Могу подкинуть...
    1. Word при экспорте в HTML вставляет кучу мусора, нужно создать список замен по вычищению, хотя можно посмотреть LibreOffice, может он красивее делает.
    2. Для Notepad++ сделать регулярки по анализу кода в функционал "Функции"
    3. Для моего плага Notepad++ я бы не отказался от регулярок подкраски кода, хотя тут нужно знание языков, как и для предыдущего пункта.
    4. Для RegExp можно обновить библиотеки регулярок, там есть некритичные ошибки и просто развить, хотя это получится мою копилку, как и предыдущий пункт.

    Всего записей: 4543 | Зарегистр. 03-05-2006 | Отправлено: 21:02 27-08-2018
    totnetot



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    В игре сразу указано условие. А тут условие расплывчато. Нужно сначала сделать экспорт в html найти мусор. Т.е. провести дополнительную (не относящуюся к регуляркам) работу. Вот если явно укажешь что найти и что заменить тогда пожалуйста.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    totnetot
    Меня ещё интересует алгоритм регулярок, анализатор, составление ветви поиска, это помогло бы правильно оптимизировать. Я видел подобное, но хотелось бы для конструкций PCRE, и чтобы было наглядно, чтобы легко понять.
     

    Цитата:
    В игре сразу указано условие
    обычно в этом и проблема, определиться в спецификации. То есть задал найти почтовые ящики, а кем они определены, вчера разрешались только англ. буквы, теперь любые в том числе русские, а вставленный символ @ для других целей может двояко интерпретироваться. И даже если регвыр составлен мгновенно, то его можно вылизать по скорости, то есть из 10 вариантов выбрать самый быстрый. Просто составление не является чем то выдающимся. Зачем придумывать задачу, если на любую задачу будет гарантированно составлен регвыр, процесс составления уже не является проблемой, обычно проблема спецификации, какие символы допустимы в конкретной части шаблона и в этом начинается проблема - угадать замысел автора, угадать поведение интерпретатора, чтобы повторить его действия.

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



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

    Цитата:
    процесс составления уже не является проблемой

    Это не есть "не проблема" для многих остальных. Не нужно по себе всех мерить. Ведь если бы это было так - то  люди бы не задавали вопросов в этой теме.

    Цитата:
    Просто составление не является чем то выдающимся.

    Согласен. Но что выдающегося например в этой игре?
     
     
    Добавлено:
     
    Я же вижу в игре следующие плюсы:
  • Обучающий процесс.
  • Способ пошевелить извилинами.
  • Иногда можно увидеть способ который знал и забыл (или не знал).
  • Повторение - мать учения.
  • Раздвигать рамки. Придумывать решения для случаев, которые с первого взгляда не могут быть решены с помощью регулярных выражений.
     
    В общем игра есть не просит. Пусть будет. Мне просто нравится это занятие - составлять регулярные выражения.

  • Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 01:46 01-09-2018 | Исправлено: totnetot, 01:57 01-09-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    totnetot
    Тебе точно надо заняться программированием. Там больше красок, а тут немного монотонно. В PureBasic можно писать маленькие программы и добавление регвыров добавляет сразу 100 кб, и начинаешь придумывать методы строковыми функциям без использования регвыров.

    Цитата:
    Но что выдающегося например в этой игре?
    Это ужасная трата времени... может я чего то не понимаю? Так же как и придумывание себе задач, когда рядом не паханное поле, если честно я ждал когда наступит пенсия чтобы я мог полноценно программировать, сейчас же у меня работа отбирает 70% времени, а если не зарядиться энергией отдыха а оставшиеся 30% потратить на программирование - это тяжело. Я даже удивляюсь откуда время на эти игры, мы так космос не построим.
    Ну вот ещё задачка соскладировать регуляки по полкам, то есть юзер хочет что-то сделать, допустим парсить html, заходит в справочник,  раздел парсинга HTML страниц и читает уже готовые примеры. Можно составить описание к ним, потому что бывает смотришь на регулярку и думаешь, что к чему... Грубо говоря он по ветви находит решение и начинает его доводить под свои запросы.

    Цитата:
    Это не есть "не проблема" для многих остальных.
    На самом деле это не проблема для всех. Проблема, когда тебе дают микросхему и говорят разгадай её свойства, а если рядом лежит учебник где написано назначение, токи входа/выхода, напряжения, логика и т.д., то любой сможет разобраться, а угадать всегда трудно,и чем сложней устройство тем сложнее до конца разгадать логику, нужно чтобы все вероятности случились, а того у кого есть схема ему не нужно ожидание всех вероятностей.
     

    Всего записей: 4543 | Зарегистр. 03-05-2006 | Отправлено: 05:18 01-09-2018
    data man



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

    Цитата:
    Меня ещё интересует алгоритм регулярок, анализатор, составление ветви поиска, это помогло бы правильно оптимизировать.

     
    Цикл статей (автор Russ Cox): Implementing Regular Expressions
     

    Цитата:
    Я видел подобное, но хотелось бы для конструкций PCRE, и чтобы было наглядно, чтобы легко понять.

    RegexBuddy умеет что-то похожее.
    Но вы об этом наверняка знаете. Значит, чем-то не устраивает.
     
    Должен заметить (справедливости ради), что PEG гораздо гибче и "мощнее". (Честно, лень искать в топике, упоминалось ли это тут.)
    Есть куча библиотек для всех популярных языков программирования.
     
    К примеру, от автора Lua есть библиотека lpeg (Lua я упомянул лишь из-за его простоты).
     
    В общем, приятного и полезного чтения.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 06:25 01-09-2018
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    data man
    Цитата:
    Значит, чем-то не устраивает.  
    Перестал пользоваться "поломанными".
     
    totnetot
    Я тут на PureBasic ковыряю плаг регвыров, пока добился работы exe-варианта, с плагом пока не клеится (буквально недавно и с exe не клеилось).

    Всего записей: 4543 | Зарегистр. 03-05-2006 | Отправлено: 18:11 04-09-2018 | Исправлено: AZJIO, 18:12 04-09-2018
    extrasensory

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Помогите пожалуйста с регулярным выражением для Notepad++ которое превратит:
     

    Код:
    Набор для изготовления картин "АЛМАЗНАЯ ЖИВОПИСЬ" арт.АЖ.1314 "Букет сирени" 40х30 см

    в:

    Код:
    Набор "Букет сирени" арт.АЖ1314

     
    Количество цифр артикула может быть и 3 и 4 и 5 цифр.
     

    Всего записей: 40 | Зарегистр. 07-11-2009 | Отправлено: 16:03 21-10-2018 | Исправлено: extrasensory, 16:05 21-10-2018
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Find: (\S*).*\".*\"(.*)(\".*\").*
    Replace: \1 \3\2

    Всего записей: 1555 | Зарегистр. 01-11-2004 | Отправлено: 16:49 21-10-2018 | Исправлено: ne_viens, 16:50 21-10-2018
    extrasensory

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ne_viens, Большое вам спасибо! Точнее огромное! Всё работает как надо!

    Всего записей: 40 | Зарегистр. 07-11-2009 | Отправлено: 17:05 21-10-2018 | Исправлено: extrasensory, 18:48 21-10-2018
    sikemo

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Find: ^(\w+).+(арт\.\w+\.\d+ )(?>(\".+\")).+
    Replace: \1 \3 \2

    Всего записей: 1327 | Зарегистр. 27-11-2008 | Отправлено: 12:36 23-10-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 89 90 91 92 93 94 95 96 97

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


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru