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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

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
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Интересное решение, но в AkelPad почему-то не находится ничего, даже если оставить только "иван". Но это более универсальное и не нужно деление. Но что-то, возможно, ошибка в строке раз не ищет.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:36 30-04-2019 | Исправлено: Aleksandr N, 12:41 30-04-2019
    Romul81



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

    Цитата:
    но в AkelPad почему-то не находится ничего, даже если оставить только "иван"

     
    Скорее всего что-то не так делаете. Даже в старом (от 14-го года) Notepad++ всё находится и заменяется. AkelPad не пользуюсь. Но не вижу причин, по которым не должно работать.

    Всего записей: 1310 | Зарегистр. 03-03-2008 | Отправлено: 12:42 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Да уважаемый, в Notepad++ всё работает как ни странно и находит и возвращает нужную строку которую легко заменить. Наверное в моём блокноте что-то не так. Хорошо, а можно как-то переопределить запрос чтобы искал или только в начале строки или по всей строке? Было-бы вообще замечательно.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:51 30-04-2019 | Исправлено: Aleksandr N, 12:54 30-04-2019
    Romul81



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

    Цитата:
    а можно как-то переопределить запрос чтобы искал или только в начале строки или по всей строке?

     
    Начало строки - ^ - поставьте перед выражением.
    "по всей строке" - не понял о чём речь. Совпадение может быть не только в первой ячейке, а во всей строке таблицы?

    Всего записей: 1310 | Зарегистр. 03-03-2008 | Отправлено: 12:59 30-04-2019
    Aleksandr N

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

    Цитата:
    Начало строки - ^ - поставьте перед выражением.

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

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 13:09 30-04-2019
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    Это элементарный синтаксис  регулярных выражений. В любой памятке есть. Граница слова называется - word boundary.

    Код:
    \b(?:ов|ин)

    Найдёт Овчинников, но не найдёт Иванов
    Найдёт Инна, но не найдёт Панин
     
    (всё это при условии нечувствительного к регистру поиска).
     
    З.Ы. В шапке есть памятки, руководства и прочие материалы по изучению рег. выражений.

    Всего записей: 1310 | Зарегистр. 03-03-2008 | Отправлено: 13:19 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Да, вот теперь всё работает, спасибо.

    Цитата:
    З.Ы. В шапке есть памятки, руководства и прочие материалы по изучению рег. выражений.

    Так я-ж сказал что ничего не понимаю в этом, а на изучение скобочек уйдёт месяц. И не факт что успешно. А так добрые люди помогли. Тем более это нужно лишь для разовой задачи, а не каждый день.
    Осталось только как я думаю перевести всё это на библиотеку Паскаля и должно получиться. Считаю проблему решённой. Всем спасибо за помощь.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 13:27 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Придя домой сделал примерчик на RAD Studio XE3 с встроенным модулем на основе PCRE. Работает. Но по религиозным соображениям я хотел использовать другой известный модуль. Так вот он пишет что "Нераспознанный Модификатор в поз 49" и неизвестно почему.

    Код:
     
    <tr style="display:none">(?=<td\b(?:(?!</?td|(?:и)).)*(?:и))
     

    Может можно ещё как-то изменить выражение чтобы получить идентичный результат? Проверить корректность могу СРАЗУ.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 16:36 30-04-2019 | Исправлено: Aleksandr N, 16:36 30-04-2019
    Romul81



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

    Цитата:
    Может можно ещё как-то изменить выражение чтобы получить идентичный результат?  

    В данном случае можно упростить альтернацию (вы ищете только по одной букве, без альтернативных вариантов):

    Код:
    <tr style="display:none">(?=<td\b(?:(?!</?td|и).)*(?:и))

    Хотя, это вряд ли может быть причиной появившейся ошибки. Вполне может быть багом вашей библиотеки. Был свидетелем подобному на QRegExp для Qt. Правда там была не ошибка, а просто некорректный результат, выдаваемый библиотекой.
     
    В общем, если не заработает, в топку такую библиотеку. В синтаксисе рег.выр-я нет ничего потустороннего.
     
    Добавлено:
    З.Ы. А можно ещё проще (в данном случае, опять же):

    Код:
    <tr style="display:none">(?=<td\b(?:(?!</?td|и).)*и)

    Всего записей: 1310 | Зарегистр. 03-03-2008 | Отправлено: 16:52 30-04-2019 | Исправлено: Romul81, 16:52 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Нет... Хотя модуль известный, но почему-то выдаёт ошибку на скобке после строки поиска. Значит проблема не в запросе. Попробую отписать автору, он русский, может жив ещё. Попробую поковыряться ещё.
    В общем ещё раз спасибо за помощь.
     
    Добавлено:
    Этот модуль входит в http://wiki.freepascal.org/Regexpr
    Очень странно...

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 17:12 30-04-2019
    Romul81



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

    Цитата:
    Этот модуль входит в http://wiki.freepascal.org/Regexpr

    Судя по документации, на которую ссылается приведённая вами страница, синтаксис "заглядывания" не поддерживается. В данном случае речь идёт об элементарном Lookahead, который даже в VBscript есть. Если эту поддержку не внедрили до сегодняшнего дня, то автору писать бесполезно, уверяю вас.
     

    Цитата:
    В общем ещё раз спасибо за помощь.

    Пожалуйста

    Всего записей: 1310 | Зарегистр. 03-03-2008 | Отправлено: 17:30 30-04-2019 | Исправлено: Romul81, 17:31 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Даже так вот... В репозитории он был час назад, написал ему, но пока не ответил. А может можно что-то сделать с запросом под этот модуль? Имею в виду само выражение. Просто у меня есть большое желание использовать маленький модуль, а не из-за одной строки тащить пару мегов откомпилированного кода, жирно уж.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 17:37 30-04-2019
    Romul81



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

    Цитата:
    А может можно что-то сделать с запросом под этот модуль?

    Етишкин ко[дт] Да то, что вам требуется можно программно расписать по indexOf, если с рег. выражениями неувязка!
     
    Только регулярками без заглядывания не получится в таком виде (без программной логики).
    Хотя, скажу по другому. Вы же не дали необходимые вводные, чтоб можно было понять, насколько глубоко можно двигаться в упрощении! Есть куча вопросв. Обрабатывается один файл, или много? Строки таблицы соответствуют строкам в файле, их содержащем? Т.е., в абсолютно ли во всех случаях <tr style="display:none"> находится в начале строки обрабатываемого файла? В какой по счёту ячейке строки находятся данные, которые вам нужно проверять? Или искомый текст может присутствовать в любом месте этой строки? Валидный ли HTML (есть ли в нём незакрытые теги и т.д.)? Ваш движок умеет искать в построчном режиме, или ^$ - это для него начало и конец стринга? Точка захватывает перевод строки?
     
    ...как только что выяснилось, даже элементарный Lookahead не поддерживается. А от этих всех нюансов зависит, как именно будет строиться регулярное выражение. А вы говорите разовая задача. Но за этот день можно уже было бы целую книжку прочесть по РВ.

    Всего записей: 1310 | Зарегистр. 03-03-2008 | Отправлено: 17:52 30-04-2019
    Aleksandr N

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

    Код:
     
    <tr style="display:none"><td class=drug><a href=(\w).htm>
     

    можно взять начало, возьму текст, очищу от тегов в середине. А как корректно взять строку от "</a></td><td class=firm" и до конца строки?
    Кстати, нужные строки таблицы именно расположены построчно, так как привёл в примерах.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 18:03 30-04-2019
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Автор модуля мне ответил, но по разговору, такое ощущение что его знание выражений на уровне моего, а модуль вообще не его. Так вот.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 13:56 07-05-2019
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В теме Notepad++ попросили удалить строки с текстом PVD-666432
    (?x)(?:\r\n|\A)[^\r\n]*?PVD-666432[^\r\n]*?(?=\r\n|\z)
    проверьте, можно ли улучшить. Возможно стоит добавить проверку переноса \r или \n или \r\n, точнее избавиться от зависимости.

    Всего записей: 4182 | Зарегистр. 03-05-2006 | Отправлено: 09:06 14-05-2019 | Исправлено: AZJIO, 09:08 14-05-2019
    Romul81



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

    Цитата:
    В теме Notepad++ попросили удалить строки с текстом PVD-666432

     

    Код:
    (?m-s:^.*?PVD-666432.*(?:\r?\n|\z))

     
    P.S. Удаляются именно строки, с переносами. Если нужно оставлять пустую строку, то для окончания строки надо применить заглядывание вперёд.

    Всего записей: 1310 | Зарегистр. 03-03-2008 | Отправлено: 10:12 14-05-2019 | Исправлено: Romul81, 10:14 14-05-2019
    YuS_2



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

    Цитата:
    можно ли улучшить


    Код:
    ^[^\n\r]*PVD-666432[^\n\r]*+[\n\r]*+

    ссылка

    Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 10:20 14-05-2019
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Ваша регулярка удаляет пустые строки, следующие за искомой строкой... Чего не было в ТЗ.
     
    Добавлено:
    К тому же будет производиться посимвольный откат на всех строках. Хотя, тут, конечно, не понятно, что лучше - не известно, ближе к началу, либо к концу искомый текст находится в строках исходника...

    Всего записей: 1310 | Зарегистр. 03-03-2008 | Отправлено: 10:26 14-05-2019
    YuS_2



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

    Цитата:
    удаляет пустые строки, следующие за искомой строкой... Чего не было в ТЗ.

    верно...
    Тогда так:
    ссылка
     

    Цитата:
    К тому же будет производиться посимвольный откат на всех строках.

    Что значит посимвольный откат?

    Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 10:50 14-05-2019 | Исправлено: YuS_2, 10:59 14-05-2019
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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

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


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru