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

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

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

    Цитата:
    нужно в выражениях типа   * [[Баб-ель-Манде́бська прото́ка|Баб-ель-Манде́бська прото́ка]]]  * [[Баб-ель-Манде́бський|Баб-ель-Манде́бський]]]  * [[бабе́зія|бабе́зія]]]  * [[Бабе́ке|Бабе́ке]]]    удалить первое ударение, т.е. то, что от [[ и до |. Среда Notepad++ | Akelpad  

    Не знаю как в указанных редакторах, поскольку каков у синтаксис не знаю, но во вменяемых редакторах можно, например, так
    Найти
    (?<=^[^\n\r\u0301]*)\u0301
    Заменить
    (ничего)
    Добавлено:
    Посмотрел одним глазом Notepad++ (Akelpad - моя выдержать не шмог - глаз самозакрылся еще до начала проб)
    В нем вроде как можно постаринке, типа
    найти
    (^[^\n\r\x{0301}]*)\x{0301}
    Заменить на
    $1

    Всего записей: 1305 | Зарегистр. 17-01-2011 | Отправлено: 03:13 19-05-2020 | Исправлено: Jonmey, 03:55 19-05-2020
    sikemo

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    второй работает, но иногда есть слова/сочетания с двумя и более ударениями, там уже $1 не заканает

    Всего записей: 1326 | Зарегистр. 27-11-2008 | Отправлено: 18:31 19-05-2020
    Jonmey

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

    Цитата:
    второй работает, но иногда есть слова/сочетания с двумя и более ударениями, там уже $1 не заканает

    Привести пример можете? Поскольку в случае
       
    ваше ТЗ
    Цитата:
    удалить первое ударение
    выполняется с помощью указанного выше решения для Notepad++

    Цитата:
    найти  
    (^[^\n\r\x{0301}]*)\x{0301}  
    Заменить на  
    $1

    Если же вам нужно удалить не первое ударение или не одно ударение или определенное по счету ударение и тд - то это совершенно иное ТЗ, которое никак не связано с вашим изначальным ТЗ, а потому проблема не в регэкспе, который "не работает" у вас на другом ТЗ, а в вас, ибо не перестаю вбивать в головы ищущим тут помощи:
     
     если хотите рабочее решение на все случаи - приводите ТЗ СРАЗУ и ПОЛНОСТЬЮ (а не высовывая его кусочками из под стола, как это делают многие). Это выгодно прежде всего вам (а не потенциальным помощникам), просто потому, что решение всей вашей "сверхзадачи", описанной сразу, полностью и точно, чаще всего оказывается проще для помощника, чем ваше вытягивание ТЗ за хвост из вашего сознания по частям (как это практикуют тут многие страждущие). Дело в том, что то, что вам кажется небольшим изменением, "добавкой" к исходному (неполно описанному вами ТЗ), часто требует внесения кардинальных изменений в предложенное помощником решение (вашего заведомо неполно описанного ТЗ), а это приводит автоматически к тому, что помощник понимает, что вы изначально злонамеренно тратили впустую его время и соответственно, результатом для вас с большой вероятностью станет то, что помощник забъёт на вас и ваши проблемы в любой момент на полпути, даже если они решаются комбинацией из трех пальцев.

    Всего записей: 1305 | Зарегистр. 17-01-2011 | Отправлено: 19:04 19-05-2020 | Исправлено: Jonmey, 20:26 19-05-2020
    sikemo

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    задача удалить все ударения до |
    * [[Баб-ель-Мандебська прото&#769;ка|Баб-ель-Манде&#769;бська прото&#769;ка]]
     
     
    Добавлено:
    * [[баба-яга&#769;|ба&#769;ба-яга&#769;]]
    не зависимо от количества и места но до |

    Всего записей: 1326 | Зарегистр. 27-11-2008 | Отправлено: 10:47 20-05-2020
    Jonmey

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

    Цитата:
    задача удалить все ударения до |  * [[Баб-ель-Мандебська прото&#769;ка|Баб-ель-Манде&#769;бська прото&#769;ка]]      Добавлено:  * [[баба-яга&#769;|ба&#769;ба-яга&#769;]]  не зависимо от количества и места но до |

    Напр., найти
    \x{0301}(?=[^\n\r]*\|)
    заменить на
     (ничего)

    Всего записей: 1305 | Зарегистр. 17-01-2011 | Отправлено: 20:56 20-05-2020
    stokber3

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возникла потребность в строку замены прописать сто пустых строк. Вопрос, пожалуй, блондинистый, но может есть какой-то способ сделать это не литерально (не \n\n\n.......\n) То есть, существует ли какое-то подобие квантификаторов для строки замены?

    Всего записей: 59 | Зарегистр. 31-01-2015 | Отправлено: 18:08 25-05-2020
    Jonmey

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

    Цитата:
    Возникла потребность в строку замены прописать сто пустых строк. Вопрос, пожалуй, блондинистый, но может есть какой-то способ сделать это не литерально (не \n\n\n.......\n) То есть, существует ли какое-то подобие квантификаторов для строки замены?  

    Вам ничто не мешает составить выражение замены не вручную, а с использованием тех же регэкспов. Например:
    - в пустом документе пишите текст
    \n
    - производите замены (используя регэкспы)
    найти
    ((\\n){1,50})(\\n)*
    заменить на
    \1\1
    до тех пор пока длина строки не перестанет изменяться, нажимая кнопку Replace All (или аналогичную в зависимости от редактора). В данном случае потребуется нажать ее 7 раз (можно смело нажимать и большее раз - длина строки, после 7-го раза остановится на длине 200 символов (выражение \n повторится 100 раз).
    Аналогичным образом можно составить без труда любое выражение со строго повторяющимися кусками любое число раз, не прибегая к ручному вводу и подсчету.
     
    Используя аналогичный прием (многократное исполнение одного и того же регэкспа (с искусственно фиксированным числом повторений части текста, как в данном случае) можно производить и замены и напрямую в тексте, для чего необходимо лишь правильно разбить искомое выражения на группы и применить к нужной описанный выше прием.

    Всего записей: 1305 | Зарегистр. 17-01-2011 | Отправлено: 20:37 25-05-2020 | Исправлено: Jonmey, 20:47 25-05-2020
    stokber3

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

    Всего записей: 59 | Зарегистр. 31-01-2015 | Отправлено: 23:20 25-05-2020
    regist123



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

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

    Всего записей: 7189 | Зарегистр. 20-03-2009 | Отправлено: 23:57 25-05-2020
    Jonmey

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

    Цитата:
    Хотелось бы облегчения не только написания таких выражений, но и дальнейшего упрощения чтения и понимания их.

    Ранее я давал ссылку на пачку книжек по регэкспам. Там более чем достаточно материала для "не только написания таких выражений, но и дальнейшего упрощения чтения и понимания их"

    Всего записей: 1305 | Зарегистр. 17-01-2011 | Отправлено: 00:19 26-05-2020
    stokber3

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    regist123
    Спасибо! Макрос написать не проблема. Задумывалось именно в макросе в окне ввода данных prompt вводить переменную, представляющую собой это количество пустых строк, которая и попадает потом в строку замены регекспа. Но видать не судьба.

    Всего записей: 59 | Зарегистр. 31-01-2015 | Отправлено: 00:19 26-05-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    stokber3
    Не знаю что за макросы у вас, но задачу формирования переменной из заданного числа (с интерактивным вводом значения) строк можно вывести в отдельный макрос/скрипт и возвращать в готовом виде в основной. В общем, как я понимаю, у вас проблема не с регэкспами, а с программированием, а это уже вопрос не для данного топика.

    Всего записей: 1305 | Зарегистр. 17-01-2011 | Отправлено: 00:25 26-05-2020
    stokber3

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

    Цитата:
    Там более чем достаточно материала для "не только написания таких выражений, но и дальнейшего упрощения чтения и понимания их"

    Согласитесь, нахождение в строке замены сотни \n\n\n\n не способствует чтению и пониманию таких выражений. Это я и имел ввиду.  
     
     

    Всего записей: 59 | Зарегистр. 31-01-2015 | Отправлено: 00:27 26-05-2020
    Jonmey

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

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

    Мне - без разницы. Тем более, что большинство редакторов позволяют вводить текст замены в явном виде (в данном случае - это четыре пустых строки в текстовом виде)

    Код:
     
     
     
     

    Если и это трудно понимать, то тогда лучше оставить это занятие вовсе.

    Всего записей: 1305 | Зарегистр. 17-01-2011 | Отправлено: 00:32 26-05-2020 | Исправлено: Jonmey, 00:32 26-05-2020
    stokber3

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jonmey
    Мне не нужно в текстовом редакторе, мне нужно для регекспа в макросе. Изначально был вопрос о подобии квантификаторов для строки замены. Понял, что это невозможно. Вопрос исчерпан. А кому чем заниматься - то такое.

    Всего записей: 59 | Зарегистр. 31-01-2015 | Отправлено: 01:09 26-05-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    stokber3
    Вы не понимаете саму идеологию регэкспов, хотя и нахватались некоторых умных слов.
    Регэкспы - это просто шаблоны для поиска. Поиск текста (будет говорить только о тексте, для простоты) - это единственная цель существования и применимости регэкспов. Все остальные операции, проводимые с найденным текстом (замена, сбор данных, разрезание и проч.) - опциональны и независимы от регэкспов. При этом все они, в отличие от регэкспов обладают одним общим свойством - они не допускают неопределенности (в отличие от регэкспов). Поэтому, например, в выражении для замены найденного текста - . (точка) - это всегда просто точка (символ), а не "любой символ", как в регэкспах, также как + или * - просто символы.
    В выражении замены могут использоваться только однозначные символы или операторы, которые не допускают неопределенности.
    Вы же возжелали, чтобы в выражения замены включили операторы, допускающие неопределенность, а квантификаторы - являются именно такими операторами.
    Например, каков результат был бы в случае попытки поиска?
    ([a]+)
    заменить на
    \1{3,5}
    Ответить невозможно. Даже в частном случае {x} - это не явное указание, а неопределенное, с той лишь разницей, что его выполнение дает один и тот же результат при одних и тех же настройках выполнения регэкспов. Аналогично с любыми операторами (а таких подавляющее большинство в регэкспах). Поэтому они запрещены в выражениях замены. Список разрешенных - весьма узок по этой причине.
    Вместо фантазий и хотелок в стиле "мне так удобнее", вам бы стоило ознакомиться с теорией, начав с поисковой строки в Гугле (книжек, как понимаю, вы читать не желаете):
    Replacement Strings Reference
    а по мере чтения многие ваши вопросы отвянут сами собой.  

    Всего записей: 1305 | Зарегистр. 17-01-2011 | Отправлено: 02:12 26-05-2020 | Исправлено: Jonmey, 02:32 26-05-2020
    Swapo

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток Уважаемые,    потратил пару часов ,  не могу найти  способ как сделать
     
    26.05.2020 9:54:07
    (100.25.6.*):  
    ХОСТ .255 ответ: PG6 # Version: Gate-40C v5.2.15,build0766,191022 (GA)
    Release Version Information: kml,
     
    26.05.2020 10:02:07
    (100.25.6.*):  
    ХОСТ .255 ответ: PG64 # Version: Gate-40C v5.2.15,build0766,191022 (GA)
    Release Version Information: kml,
     
     
    Необходимо на выходе получить
     
    PG6 # Version: Gate-40C v5.2.15
    PG64 # Version: Gate-40C v5.2.18
     
    т.е  не  могу понять каким выражением удалить лишнее за один проход! ,спасибо за помощь.

    Всего записей: 32 | Зарегистр. 02-06-2012 | Отправлено: 11:24 26-05-2020
    los

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Swapo,
    можно фильтровать с помощью grep
    $ grep -oE 'PG[[:digit:]]{1,2}[[:blank:]]#[[:blank:]]Version:[[:blank:]]Gate-40C[[:blank:]]v5\.2\.[0-9]{1,2}' file

    Всего записей: 7311 | Зарегистр. 08-09-2001 | Отправлено: 14:21 26-05-2020
    Swapo

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

    Цитата:
    можно фильтровать с помощью grep

     
    эх Я знал что кто-то любит Греп .  Уважаемый,    если не сложно , помогите тогда разобраться,  
     
    get sys status  выдает следущее:
     
    Version: FortiGate-40C v5.2.15,build0766,191022 (GA)
    Serial-Number: FGT40C6666
    ...........
    System time: Tue May 26 16:33:57 2020
    ----------------------------------------------
    Синтаксис  очень интересный  
     
    Usage: grep [-invfcABC] PATTERN
    Options:
            -i      Ignore case distinctions
            -n      Print line number with output lines
            -v      Select non-matching lines
            -f      Print fortinet config context
            -c      Only print count of matching lines
            -A      Print NUM lines of trailing context
            -B      Print NUM lines of leading context
            -C      Print NUM lines of output context
    нашел  что-то подобное  тут  https://www.digitalocean.com/community/tutorials/using-grep-regular-expressions-to-search-for-text-patterns-in-linux
     
    Если сделать get sys status | grep Version:
    Version: FortiGate-40C v5.2.15,build0766,191022 (GA)
     
    get sys status | grep Serial
    Serial-Number: FGT40C666
     
    Также  знаю что  тут канает такой синтаксис ,  grep -f "_3g_.*\/1"
    если  при выводе я получил вот такое,  и мне надо только 3G и только со статусом 1/1
    (
    '6666_w2' 66660:0  selectors(total,up): 1/1  rx(pkt,err): 0/0  tx(pkt,err): 0/0
    '6666_w2' 6666:0  selectors(total,up): 1/1  rx(pkt,err): 333/0  tx(pkt,err): 346/0
    '6666_3g_w1_37' 6666:26  selectors(total,up): 1/1  rx(pkt,err): 0/0  tx(pkt,err): 0/0
    '6666_3g_w2_36' 6666:26  selectors(total,up): 1/0  rx(pkt,err): 0/0  tx(pkt,err): 0/0  
    )
       grep -f "_3g_.*\/1"  Получу.
     
    '6666_3g_w1_37' 6666:26  selectors(total,up): 1/1  rx(pkt,err): 1/1  rx(pkt,err): 732769/0  tx(pkt,err): 978302/11 <---
     
    ------------
     
    Вопрос ,  я не по NP++ а вот по этому синтаксису , как возможно сделать выборку одновременно 2х значений
    например:  get sys status | grep (Version|(Serial)
     чтобы вывести значения :
     
    Version: FortiGate-40C v5.2.15,build0766,191022 (GA)
    Serial-Number: FGT40C6666
     
    Добавлено:
    los
    сорри забыл упомянуть.

    Всего записей: 32 | Зарегистр. 02-06-2012 | Отправлено: 17:11 26-05-2020
    los

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

    Цитата:
    чтобы вывести значения :  

    $ grep -Ei 'version|serial' file

    Всего записей: 7311 | Зарегистр. 08-09-2001 | Отправлено: 17:38 26-05-2020
    Открыть новую тему     Написать ответ в эту тему

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