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

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



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    extrasensory
    может кто более изящное решение предложит, а пока так

    Код:
    \d+_\d\d_\d\d_(\d{4})-(\d\d)_(\d\d)_\d{4}

    на

    Код:
    $1-$2-$3

    Подробнее...


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

    Всего записей: 7189 | Зарегистр. 20-03-2009 | Отправлено: 12:01 10-05-2018 | Исправлено: regist123, 12:34 10-05-2018
    YuS_2



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

    Цитата:
    как должно выглядеть регулярное выражение для переименования в Total Commander, что-бы получилось:

    Варианты, есть конечно, но я бы сделал так:
    [v] рег.выраж.
    остальные "птицы" выключить
    Найти:

    Код:
    ^[\d_]+-(\d{2})_(\d{2})_(\d{4})

    Заменить на:

    Код:
    $3-$2-$1

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:23 10-05-2018
    Jonmey

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

    Цитата:
    Подскажите пожалуйста, имеются файлы такого вида:  
     
    89915204325261714819778_03_05_2018-03_05_2018.gpx  
    89915204325261714819778_04_05_2018-04_05_2018.gpx  
    89915204325261714819778_08_05_2018-08_05_2018.gpx  
     
    как должно выглядеть регулярное выражение для переименования в Total Commander, что-бы получилось:  
     
    2018-05-03.gpx  
    2018-05-04.gpx  
    2018-05-08.gpx

    Если требуемые цифры/символы для составления нового имени файла занимают в исходных файлах одни и те же позиции, то регэкспы не нужны.
    Достаточно использовать маску ("Rename mask: file name"), например
     
    [N31-35][N28-29]-[N25-26]
     
    (кнопка "[N#-#] Range" поможет сделать это в визуальном режиме)

    Всего записей: 1325 | Зарегистр. 17-01-2011 | Отправлено: 12:51 10-05-2018
    YuS_2



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

    Цитата:
    Если ..., то регэкспы не нужны.

    осталось только выяснить, зачем тогда здесь (в данном топике) нужен этот ответ?

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:01 10-05-2018
    Jonmey

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

    Цитата:
    осталось только выяснить, зачем тогда здесь (в данном топике) нужен этот ответ?


    Цитата:
    для переименования в Total Commander

    обладающего специфическими возможностями переименования, которые позволяют решать многие вопросы переименования без использования регулярных выражений, в том числе и такие, при которых регулярные выражения бессильны, и что, как показывает опыт, часто, даже неизвестно пользователям TC.
    Хотя сама по себе указанная выше возможность равносильна простейшей замене (но, в отличие от нее удобнее и проще в применении), типа:
     
    Заменить:
    ........................(..).(..).(.....)..........  
     
    или то же, но короче (и менее наглядно):
     
    .{24}(.{2}).(.{2}).(.{5}).{10}
     
    На:  
     
    $3$2-$1
     
    (для случая, когда символы, нужные для составления нового имени занимают в именах файлов одни и те-же положнения)
     
    На мой скромный взгляд метод

    Цитата:
    Достаточно использовать маску ("Rename mask: file name"), например  
     
    [N31-35][N28-29]-[N25-26]  
     
    (кнопка "[N#-#] Range" поможет сделать это в визуальном режиме)

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

    Всего записей: 1325 | Зарегистр. 17-01-2011 | Отправлено: 21:10 10-05-2018 | Исправлено: Jonmey, 22:00 10-05-2018
    extrasensory

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    regist123, YuS_2, Jonmey - Огромное, огромное спасибо! Все варианты рабочие. Честно говоря, до последнего стараюсь не спрашивать, понимая, что наверняка отправят к Гуглу, но я то "там" уже набродился и когда ну совсем не могу понять тогда да, только тогда и обращаюсь и на примере этой темы, ничего лич(ш)него не слышал, только реальная помощь, а еще (и в большей степени) мне эти ответы помогаю разбираться дальше, по аналогии. В сети хоть и всё есть и может (кто уже разбирается) кажется всё разжеванно, но всё не так доходчиво и примеры очень простые что-ли, которые понятны, а вот что-то более сложно и сразу наезжаю на пень, а эти три варианта мне очень сильно помогли, смог понять принцип и составил для схожих задач нужные выражения. Ёще раз большое спасибо!
     
     
     
     
    Добавлено:

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

    Jonmey, Вы правы! Именно тот случай, я и не знал о такой возможности! Спасибо. (прошу прощения, что немного за рамки регулярных выражений вышел)
     

    Всего записей: 40 | Зарегистр. 07-11-2009 | Отправлено: 00:11 11-05-2018
    YuS_2



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

    Цитата:
    Мне казалось

    Не знаю, чего там показалось, но ключевыми были слова:

    Цитата:
    в данном топике

    и Ваше:

    Цитата:
    то регэкспы не нужны


    - обратите внимание на название темы, если я не совсем понятно выразился.

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 09:06 11-05-2018
    Jonmey

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

    Цитата:
    Jonmey

    Цитата:
    Мне казалось

    Не знаю, чего там показалось, но ключевыми были слова:

    Цитата:
    в данном топике

    и Ваше:

    Цитата:
    то регэкспы не нужны


    - обратите внимание на название темы, если я не совсем понятно выразился.
    Напомню, мое сообшение было ответом на конкретный вопрос вопрос пользователя.
    Который подтвердил его нужность.
     
    Если вас что-то не устраивает - есть кнопка "Cообщить модератору". В остальном, смысл ваших сообщений адресованных мне, уловить не в состоянии, кроме очевидного нарушения п. 2.16. главы VIII Соглашения по использованию.

    Всего записей: 1325 | Зарегистр. 17-01-2011 | Отправлено: 10:13 11-05-2018 | Исправлено: Jonmey, 10:15 11-05-2018
    YuS_2



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

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:05 11-05-2018
    abitip35pro9600gt



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет. Прошу помощи.
    Можно ли сделать последовательную замену одной командой?
    Т.е. отдельно делаю поиск и замену, скажем
    найти 1
    заменить 2
     
    найти 3
    заменить 1
     
    найти 2
    заменить 3
     
    Спасибо.

    Всего записей: 17 | Зарегистр. 10-11-2010 | Отправлено: 18:09 07-06-2018
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    abitip35pro9600gt
    Одной - нет (не рег выражениями - в php, к примеру, есть strtr)

    Всего записей: 15148 | Зарегистр. 20-09-2014 | Отправлено: 18:43 07-06-2018
    abitip35pro9600gt



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И notepad++ не поможет?

    Всего записей: 17 | Зарегистр. 10-11-2010 | Отправлено: 18:58 07-06-2018
    YuS_2



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

    Цитата:
    И notepad++ не поможет?

    AkelPad со скриптом FindReplaceEx.js поможет. В скрипте присутствует возможность формировать пакеты шаблонов.

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:07 07-06-2018
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    abitip35pro9600gt 19:58 07-06-2018
    Цитата:
    И notepad++ не поможет?

    поможет если написать макрос. В теме по нему уже несколько раз спрашивали про подобное .

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

    Всего записей: 7189 | Зарегистр. 20-03-2009 | Отправлено: 23:19 07-06-2018
    totnetot



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    abitip35pro9600gt
    Большинство современных редакторов текста позволяют выполнить поиск по regex`ам и заменить соответствия на текст. Я пользуюсь Sublime Text - в нём эта задача решается легче и удобней чем во многих других редакторах (почти как в специализированных программах помогающих составлять regex). По мере ввода regex выражения - осуществляется мгновенное подсвечивание соответствующего  текста. Т.е. не нужно нажимать каждый раз кнопку "Поиск" как во многих других редакторах - чтобы проверить, найдено соответствие или нет.
     
    Есть ещё вариант попроще - grepWin.

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А есть ещё супер вариант - использовать скрипт AHK.
    Вот код с комментариями - любой должен разобраться.

    Код:
    #NoEnv
    #SingleInstance, force
    FileRead, text001, test00001.txt ;обрабатываемый файл
    change001 := "замена текста 001" ;текст001 который будет вставлен
    change002 := "замена текста 002" ;текст002 который будет вставлен
    text001 := RegExReplace(text001, "m)искомый regex 001", change001, number_Change, , 1) ; m) = многострочность, "искомый regex 001" - регулярное выражение regex
    text001 := RegExReplace(text001, "m)искомый regex 002", change002, number_Change, , 1)
    FileDelete, test00002.txt ;удаляем файл
    FileAppend, %text001%, test00002.txt ;сохраняем результат в новый файл
    ExitApp
     

     
    В этом коде меняем только то, что выделено жирным шрифтом. Можно продублировать строки замен и за один запуск скрипта выполнить хоть 1000 замен - что и требовалось изначально.

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 05:17 08-06-2018 | Исправлено: totnetot, 05:25 08-06-2018
    Jonmey

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

    Цитата:
    Можно ли сделать последовательную замену одной командой?  
    Т.е. отдельно делаю поиск и замену, скажем  
    найти 1  
    заменить 2  
     
    найти 3  
    заменить 1  
     
    найти 2  
    заменить 3

    Без использования регулярных выражений в файле с кодировкой ANSI это можно сделать даже с помощью BАT файла следующего содержания:
     
    @echo off
    Setlocal EnableDelayedExpansion EnableExtensions
    :: Файл, в котором требуется провести замены по списку
    Set infile=file.txt
    :: Файл, в котором содержится список замен
    :: Слова в файле замены разделяются знаками |  
    :: Например:
    ::            1|2
    ::            2|3
    ::            3|2

    Set Replaces=repl.txt
    set cnt=0
    for /f "UseBackQ tokens=1,2 delims=|" %%a in ("%Replaces%") do set/a cnt+=1& set what.!cnt!=%%a& set repl.!cnt!=%%b
     
    for /F "UseBackQ tokens=* delims=," %%n in ("%infile%") do (
      set "Line=%%n"
      for /L %%c in (1,1,%cnt%) do call set "Line=%%Line:!what.%%c!=!repl.%%c!%%"
      echo !Line!>>TMP.TXT
    )
    move /y TMP.TXT "%infile%"
    pause

    Всего записей: 1325 | Зарегистр. 17-01-2011 | Отправлено: 06:12 08-06-2018 | Исправлено: Jonmey, 06:13 08-06-2018
    totnetot



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Усовершенствованный вариант скрипта AHK.
    Многострочность уже встроена.
    Заменяем выделенный жирным текст на свои значения.
    Строки regex_N и change_N - можно продолжить до бесконечности.
     

    Код:
     
    #NoEnv
    #SingleInstance, force
    file_in := "test00001.txt" ;обрабатываемый файл
    file_out := "test00002.txt" ;файл в который записываем результат обработки
    FileRead, text_1, %file_in%
    ;__________________________________________________________________
    regex_1 := "REGEX выражение 1"
    change_1 := "вставляемый текст 1"
    ;__________________________________________________________________
    regex_2 := "REGEX выражение 2"
    change_2 := "вставляемый текст 2"
    ;__________________________________________________________________
    regex_3 := "REGEX выражение 3"
    change_3 := "вставляемый текст 3"
    ;__________________________________________________________________
    regex_a = 1
    while regex_a <> ""
        {
            regex_a := "regex_"A_index
            regex_ :="m)"%regex_a%
            change_ := "change_"A_index
            text_1 := RegExReplace(text_1, regex_, %change_%, number_Change, , 1)
            _next := A_Index + 1
            regex_next := "regex_"_next
            next_ := %regex_next%
            if next_ =
                {
                    break
                }
        }
    FileDelete, %file_out%
    FileAppend, %text_1%, %file_out%
    ExitApp

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 06:35 08-06-2018 | Исправлено: totnetot, 06:43 08-06-2018
    abitip35pro9600gt



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем спасибо  большое, за проявленный интерес. Даже не ожидал такой реакции. Сегодня буду пробовать. По результатам отпишусь
     
    Добавлено:
    Значит так. БАТик замену производит, но почему-то только на "2". Т.е. все значения 1, 2 и 3 заменились на 2
     

    Цитата:
    Без использования регулярных выражений в файле с кодировкой ANSI это можно сделать даже с помощью BАT файла следующего содержания:  
     
    @echo off  
    Setlocal EnableDelayedExpansion EnableExtensions  
    :: Файл, в котором требуется провести замены по списку  
    Set infile=file.txt  
    :: Файл, в котором содержится список замен  
    :: Слова в файле замены разделяются знаками |  
    :: Например:  
    ::            1|2  
    ::            2|3  
    ::            3|2  
    Set Replaces=repl.txt  
    set cnt=0  
    for /f "UseBackQ tokens=1,2 delims=|" %%a in ("%Replaces%") do set/a cnt+=1& set what.!cnt!=%%a& set repl.!cnt!=%%b  
     
    for /F "UseBackQ tokens=* delims=," %%n in ("%infile%") do (  
      set "Line=%%n"  
      for /L %%c in (1,1,%cnt%) do call set "Line=%%Line:!what.%%c!=!repl.%%c!%%"  
      echo !Line!>>TMP.TXT  
    )  
    move /y TMP.TXT "%infile%"  
    pause


    Всего записей: 17 | Зарегистр. 10-11-2010 | Отправлено: 07:36 08-06-2018
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не удивительно, что в итоге получаются 2-ки.
    Нужно сделать последовательно такие замены:
    2|4
    3|2
    4|3
    1|2
    Вводится промежуточный элемент 4

    Всего записей: 885 | Зарегистр. 14-12-2005 | Отправлено: 13:45 08-06-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

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


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru