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

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

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

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
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asku
    Regexp doesn't see ahead and find out first string what satisfies the condition, and here it is the group of two digits (first expression):
    (\d{1,2})
    If you add at end of regexp for example
    (?!\d) (next symbol cannot be any digit)
    first regexp will working right
    (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((1\d{2})|(2[0-4]\d)|(25[0-5])|(\d{1,2}))(?!\d)

    Всего записей: 1327 | Зарегистр. 17-01-2011 | Отправлено: 01:28 22-04-2023
    asku



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

    Всего записей: 540 | Зарегистр. 04-05-2016 | Отправлено: 08:59 22-04-2023
    qw12



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

    Цитата:
    Вопрос такой: почему не работает первая регулярка? В чем между двумя выражениями принципиальное отличие?
    Не могу понять. Первая часть (до оператора {3}) одинаковая, дальше даются несколько групп в скобках, разделенные логическим «или». Группы одинаковые, только расставлены в другом порядке. Ну и что? Там же ...или...или...или...
    Прошу объяснить.

    Обе регулярные выражения нацелены на поиск корректных IP-адресов, однако они несколько отличаются друг от друга.
     
    Первая регулярка (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])).){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])) использует группу с возможными значениями от 0 до 255 для всех четырех октетов IP-адреса. Однако, поскольку группа идет в цикле {3}, то последний октет не может быть равен 0, так как после трех точек в IP-адресе должен следовать последний октет. Это ограничение делает первую регулярку неправильной для поиска корректных IP-адресов.
     
    Исправленная регулярка (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])).){3}((1\d{2})|(2[0-4]\d)|(25[0-5])|(\d{1,2})) решает эту проблему, добавляя возможность использования чисел от 0 до 99 для последнего октета IP-адреса. Таким образом, последний октет теперь может быть равен 0, что делает регулярку более подходящей для поиска корректных IP-адресов.
     
    Важно отметить, что порядок групп в скобках имеет значение в регулярных выражениях, так как они могут влиять на последовательность проверки совпадений. В данном случае изменение порядка групп в скобках не было причиной для исправления регулярки, а причиной было добавление возможности использования чисел от 0 до 99 для последнего октета.

    Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 12:47 24-04-2023 | Исправлено: qw12, 12:47 24-04-2023
    Jonmey

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

    Цитата:
    последний октет не может быть равен 0, так как после трех точек в IP-адресе должен следовать последний октет. Это ограничение делает первую регулярку неправильной для поиска корректных IP-адресов

    You forget about the part of first expression:
    (\d{1,2})

    Цитата:
    (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])).){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))

    what is equal the array of 0-99:
    0,1,2,3,....97,98,99

    Всего записей: 1327 | Зарегистр. 17-01-2011 | Отправлено: 20:57 24-04-2023 | Исправлено: Jonmey, 21:02 24-04-2023
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asku
    разбор регвыра для IP
     
    Добавил в прогу My_Notepad_Sci подсветку для регулярных выражений (скриншот). Мне сразу стало удобней, задав размер шрифта 26.

    Всего записей: 4415 | Зарегистр. 03-05-2006 | Отправлено: 23:22 24-04-2023 | Исправлено: AZJIO, 00:08 25-04-2023
    Fafy

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Родненькие, подскажите, пожалуйста, как ищется любая сноска в MS Office 2010 при использовании регулярных выражений? Без включения регулярки работает эта комбинация символов ^f , но при включении регулярки офис ругается на символ ^

    Всего записей: 727 | Зарегистр. 25-10-2010 | Отправлено: 17:54 25-04-2023
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fafy
    так это же не особенность регулярок, а особенность офиса. поэтому в Microsoft Office 2010 (Часть 1)

    Всего записей: 15211 | Зарегистр. 20-09-2014 | Отправлено: 01:25 26-04-2023
    Fafy

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли с помощью регулярных выражений произвести поиск и замену, например, удалить пробелы перед символами препинания таких как, точка, запятая, двоеточие, точка с запятой, восклицательный знак, вопросительный знак, перед закрывающейся скобкой за один раз? Возможны ли подобные констукции в регулярных выражениях?

    Всего записей: 727 | Зарегистр. 25-10-2010 | Отправлено: 07:32 26-04-2023 | Исправлено: Fafy, 07:35 26-04-2023
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fafy
    (for MS Office)
    Find: [ ]@([,\.;:\!\?\)])
    Replace to: \1

    Всего записей: 1327 | Зарегистр. 17-01-2011 | Отправлено: 07:56 26-04-2023 | Исправлено: Jonmey, 07:57 26-04-2023
    Fafy

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jonmey
    Ух ты! Спасибо вам большое за подсазку!
    А не подскажете хороший обучающий видеокурс по регулярным выражениям как для чайников. Хочу разобраться в них, но от всяких справок голова пухнет, тяжеловато для понимания.

    Всего записей: 727 | Зарегистр. 25-10-2010 | Отправлено: 08:46 26-04-2023
    qw12



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    https://habr.com/ru/articles/115825/
    https://habr.com/ru/articles/115436/
    https://proglib.io/p/learn-regex
     
    В MS Office используется библиотека NET, которая несколько отличается других, но принцип остается прежним.
    https://learn.microsoft.com/ru-ru/dotnet/standard/base-types/regular-expression-language-quick-reference
     
     
     
    Добавлено:
    Вообще, в шапке все есть.
     
    Добавлено:
    Надо самому тренироваться начиная с простого и малого, тогда придет понимание, видеокурсов как таковых наверно нет.

    Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 10:09 26-04-2023
    Fafy

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    qw12
    Спасибо!
     
    Как можно прописать поиск и замену между числовыми блоками разной длины символ дефиса, минуса или длинного тире на символ короткого тире. Но с учётом, что впереди или после дефисов, минусов или длинного тире могут присутствовать пробелы.
     
    Например:
    1829-1908 >  1829–1908
    1829—1908 >  1829–1908
    23 —100 >  23–100
    23— 100 >  23–100
    6 - 55 >  6–55
     
    Возможно ли это сделать за один раз?

    Всего записей: 727 | Зарегистр. 25-10-2010 | Отправлено: 10:28 26-04-2023 | Исправлено: Fafy, 10:30 26-04-2023
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fafy
    Find: (<[0-9]@>)[ ^+^s^-^=-]@(<[0-9]@>)
    Replace to: \1–\2

    Всего записей: 1327 | Зарегистр. 17-01-2011 | Отправлено: 11:11 26-04-2023 | Исправлено: Jonmey, 11:24 26-04-2023
    Fafy

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jonmey
    Где-то ошибка в поисковом запросе, потому что часто лишее захватывает.  
    Нужно найти между числами знаки минуса или дефиса или длинного тире и заменить его на короткое тире. Это основное! Но в поисковый запрос нужно указать дополнительно, что  дефис, минус или длинное тире не обязательно соседствуют с числами, а могут быть ещё и пробелы спереди или сзади дефиса, минуса или длинного тире, которые, если найдутся между числовыми блоками нужно удалить, там где они есть.
     
    Например:
    1829-1908 >  1829–1908
    1829—1908 >  1829–1908
    23 —100 >  23–100
    23— 100 >  23–100
    6 - 55 >  6–55
     
    Я попробовал упростить поисковый запрос на ([0-9])[ ^+^s^-^=-]@([0-9]) и стало лучше, но в поисковый запрос ошибочно попадают и вот такие примеры:

    Код:
    4 19 марта.  

    Тут есть пробел между числами, но нету одного из обязательных символов между числами как минус, дефис или длинное тире.
    Как можно подправить поисковый запрос, чтобы получилось как нужно?
    Или может указать все возможные комбинации с пробелами и минусом, дефисом или длинным тире которые могут бить между числами? Это всего девять комбинаций.
     
    Нужно обработать 20 томов после OCR, и без автоматизации с помощью регулярных выражений это займёт очень много времени.

    Всего записей: 727 | Зарегистр. 25-10-2010 | Отправлено: 11:34 26-04-2023 | Исправлено: Fafy, 12:05 26-04-2023
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fafy не знаю как там в ворде, надеюсь если что сможете сами под него поправить,  а так регулярка
    Найти:

    Код:
    (\d)\s?[-—]\s?(\d)

    заменить на:

    Код:
    $1-$2

    И разницу между минусом и коротким дефисом не знаю, в приведённых вами примерах отрабатывает на всех. Если что допишите нужный в квадратные скобки.


    ----------
    Раздачи и акции

    Всего записей: 7189 | Зарегистр. 20-03-2009 | Отправлено: 14:53 26-04-2023 | Исправлено: regist123, 14:57 26-04-2023
    Fafy

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    regist123
    В ворде такая конструкция не хочет работать. Не выдает никакой ошибки, но и ничего не находит, хотя должно находить.

    Всего записей: 727 | Зарегистр. 25-10-2010 | Отправлено: 16:45 26-04-2023
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fafy
    MS Word works not correct with some expressions. But may be it is the problem of my old MS Word, for example the regexp is correct
    [0-9][ ]*[^=^+-][ ]*[0-9]
    but my MS Word doesn’t find out all matches.
    In the case you could use step-by-step way using simple regexps:
    ([0-9])[ ]([^=^+-][ ]([0-9])) to \1\2
    ([0-9])[ ][^=^+-])([0-9]) to \1\2
    ([0-9][^=^+-])[ ]([0-9]) to \1\2
    ([0-9])[^=^+-]([0-9]) to \1–\2

     
    Another way is that you save your document as html file and treat last one as txt document using any advanced text editor (EditPad, etc.). When you made you need replaces the html file can be opened by MS Word and saved as .doc(x).

    Всего записей: 1327 | Зарегистр. 17-01-2011 | Отправлено: 21:11 26-04-2023 | Исправлено: Jonmey, 21:14 26-04-2023
    Fafy

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может кому пригодится, сам еле нашёл!  
    Сноски в приложении Word при использовании регулярных выражений ищутся через

    Код:
    ^2

     
    Jonmey
    Немного разобразля в регулярках, но так же понял, что в приложении Word есть (и не мало) отличий от регулярных выражений чем в других приложениях.
    Очень не хватает символа, который бы описывал ВОЗМОЖНОЕ наличие символа. В смысле, он может бить, а может и отсутствовать, это позволило бы писать более продвинутые конструкции для поиска, а так приходится делать вместо этого несколько конструкций, которые нужно использовать отдельно друг от друга. Или я ошибаюсь и в Word есть такое обозначение, просто оно пишется по другому и мало кто знает о нем?
     
    Добавлено:
    Что-то не могу придумать как прописать поиск нарушений использований парных символов таких как круглые и квадратные скобки и кавыки разных видов, когда, например, открывающая квадратная скобка есть, потом любое количество любых символов, а потом СЛЕДУЮЩИЙ символ СКОБКИ опять открывающая скобка, а не закрывающая. Или наоборот открывающей квадратной скобки нет а есть только закрывающая.  
    Пробовал вот такой вариант:

    Код:
    \[?@\[

    но он не рабочий потому, что работает не так как надо (синим это то, что найдено по шаблону):

    Код:
    [ ] — Квадратные скобки используются для поиска набора символов, помещенных в скобки. Символы могут быть перечислены по отдельности, или в виде некоторого диапазона символов, обозначенного первым и последним символом, разделенных знаком '-'. Например, [abc] будет соответствовать...

    Всего записей: 727 | Зарегистр. 25-10-2010 | Отправлено: 13:33 27-04-2023 | Исправлено: Fafy, 14:14 27-04-2023
    Jonmey

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

    Цитата:
    Что-то не могу придумать как прописать поиск нарушений использований парных символов таких как круглые и квадратные скобки и кавыки разных видов, когда, например, открывающая квадратная скобка есть, потом любое количество любых символов, а потом СЛЕДУЮЩИЙ символ СКОБКИ опять открывающая скобка, а не закрывающая. Или наоборот открывающей квадратной скобки нет а есть только закрывающая.  

    I think the problem can't be solved right in the MS Word using regexp only. At least there needs using macroses of the Word or jscpipts or advanced text editors (powergrep, etc.)

    Всего записей: 1327 | Зарегистр. 17-01-2011 | Отправлено: 20:25 27-04-2023
    asku



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fafy
    Я лет семь назад купил вот здесь макрос для Word для поиска с помощью регулярных выражений:
    Методичка
    Стоил совсем дешево. До сих пор пользуюсь.
    Единственный минус этого макроса — регулярные выражения можно использовать только в стоке поиска (но не в строке замены).

    Всего записей: 540 | Зарегистр. 04-05-2016 | Отправлено: 20:35 27-04-2023
    Открыть новую тему     Написать ответ в эту тему

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

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


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru