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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81, да, это вариант вполне сгодится Спасибо. Если не затруднит, можете сделать разбор регекспа, для понимания того, что он делает.
     
    YuS_2, там ещё помимо локального ренейма, ренейм на FTP-сервере. Использую в TC ренейм по списку, так что npp вполне годится Тем не менее, то, что powershell умеет регекспы на заметку возьму
     
    Jonmey, отписался в ветке по TC
     
    p.s. Спасибо всем откликнувшимся )))

    Всего записей: 2309 | Зарегистр. 19-09-2011 | Отправлено: 18:24 16-03-2019 | Исправлено: Baltazar500, 18:30 16-03-2019
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Baltazar500 (post)
    Цитата:
    Если не затруднит, можете сделать разбор регекспа, для понимания того, что он делает.  

    Лучше всего посмотреть здесь. Объяснение в правом верхнем углу. Правда, на английском.
     
    На самом деле, всё достаточно просто. Движок сначала смотрит назад и проверяет, чтоб стринг сзади точки не содержал E01, E02, E27, и т.д. Если истина (т.е. такого стринга нет непосредственно перед точкой), то точка захватывается. Далее движок смотрит вперёд. Чтобы последующий стринг, содержащий латинские буквы и цифры, НЕ заканчивался окончанием строки. Т.е. не был расширением файла. При истинности этого условия регулярка считается успешной и захватывает искомую точку.
    В случае, когда любое из заглядываний (как назад, так и вперёд) возвращает ЛОЖЬ, регулярка фейлится и точка не захватывается.
     
    З.Ы. Можете ещё покрутить дебаггер, чтобы стало понятней.

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 19:14 16-03-2019 | Исправлено: Romul81, 19:17 16-03-2019
    Jonmey

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

    Всего записей: 1377 | Зарегистр. 17-01-2011 | Отправлено: 19:25 16-03-2019
    YuS_2



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

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 23:21 16-03-2019
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Может вам сюда переместиться?

    Всего записей: 1377 | Зарегистр. 17-01-2011 | Отправлено: 01:41 17-03-2019
    az03v

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите определить рег. выр. Только начинаю осваивать.
     
    Есть строка текста вида:
    0C11>xx0y
    где хх может принимать значения от 00 до 30, а y - 2 или 3.  
    Додумался только до 0C11>[0-3][0-9]0(2|3), но в этом случае диапазон хх будет от 00 до 39.
     
     

    Всего записей: 63 | Зарегистр. 31-08-2007 | Отправлено: 16:13 25-03-2019
    Nikolka00

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    у кого нить есть проект под сборку MSVC 2013-2019 Win64 желательно статик, либы REGEX GNU ?
    интересует именно она
     
    PCRE и остальные не интересуют

    Всего записей: 438 | Зарегистр. 08-08-2008 | Отправлено: 16:26 25-03-2019
    Romul81



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

    Цитата:
    Есть строка текста вида:  
    0C11>xx0y  
    где хх может принимать значения от 00 до 30, а y - 2 или 3.


    Код:
    0C11>([0-2][0-9]|30)0([23])

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 17:16 25-03-2019
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хочу применить такой рег:
    Код:
    /<no>\n*.*\n*.*\n.*?<\/no>/g
    для поиска текста внутри тега, как обойти проблему с переносами строк, поскольку они могут быть и их количество неизвестно?
    https://jpegshare.net/images/14/b7/14b758b4c1c1a64ab846a12ae3d9b4f5.png
    https://jpegshare.net/images/a4/a8/a4a8f95f189e6d72a2574ddc9ed0f57f.png
     
     •  Добавлено:
    Вроде нашёл решение:
    Код:
    (.|\n)*?

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 11:36 03-04-2019 | Исправлено: VVL99, 12:59 03-04-2019
    AZJIO



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

    Цитата:
    (.|\n)*?  


    Код:
    [.\v]*?

    Знак ИЛИ можно перечислением. /v - вертикальный пробел, включает \r. Если перед регуляркой стоит флаг (?s), он может по другому задаваться, то есть точка включает в себя знак \n, то есть итоговый останется .*?  так как часто нужен контент а не позволяющий пустоту, то .+?

    Всего записей: 4558 | Зарегистр. 03-05-2006 | Отправлено: 13:17 03-04-2019
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Тут кстати легко проверить, пишем в форме ответа текст:

    Код:
    [no]
    [q]1[/q][b]111[/b][q]2[/q][q]3[/q]
    [/no]

     
    А в консоле проверяем:
    Код:
    post.value.match(/\[no\](.|\n)*?\[\/no\]/g)

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 13:35 03-04-2019 | Исправлено: VVL99, 14:13 03-04-2019
    PryMan



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, с такой задачей.
    Нужно с помощью программы TextReplace найти и заменить текст.
     
    Пример строки: <data value="Sub:98.32 878.757 8757"/>
    Нужно заменить текст находящийся в кавычках на другой.
    Текст может содержать прописные и строчные латинские буквы, цифры, пробелы, двоеточия и точки.
     
    Подскажите выражение для поиска такой строки

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 18:25 03-04-2019 | Исправлено: PryMan, 18:27 03-04-2019
    Romul81



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

    Цитата:
    Тут кстати легко проверить, пишем в форме ответа текст:  
     
    //
     
    А в консоле проверяем:

    Если речь идёт о Javascript, то почему бы не сделать просто:

    Код:
    post.value.match(/\[no\][^]*?\[\/no\]/g)

    Этот огород с посимвольным захватом ни к чему.
    Если задача более специфическая, то изложите её, пожалуйста, подробнее.
     
    PryMan (Пост)

    Цитата:
    Пример строки: <data value="Sub:98.32 878.757 8757"/>


    Код:
    <data\s+value\s*=\s*"([\x20A-Za-z0-9:\.]+)"\s*/>

     
    Искомый текст захватывается в первую группу (\1 , $1 , в зависимости от синтаксиса).

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 19:08 03-04-2019
    PryMan



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Спасибо за ответ, но тоже не работает, как и вариант AZJIO
    Возможно, дело в программе TextReplace.
    Буду просить AZJIO о помощи.
     

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 21:40 03-04-2019
    Romul81



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

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 21:56 03-04-2019
    PryMan



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81 большущее спасибо! Всё заработало.    
    Я догадывался, что сам косячу, но никак не мог понять в чём :)

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 00:15 04-04-2019 | Исправлено: PryMan, 00:16 04-04-2019
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    такие строки
    а= 3
    а =3
    а=3
    надо привести к такому виду
    а = 3
    примерно таким регулярным выражением

    Код:
    (?x)(?<!\h)([=+<>])(?!\h)   |   \h*?([=+<>])(?!\h)    |    (?<!\h)([=+<>])\h*

    проблема, при замене на группу " \1 " у нас на самом деле 3 группы.
    Можно было бы заменить таким способом

    Код:
    \h*?([=+<>])\h*?

    То есть он будет заменять даже в "а = 3", но если бы это было одним кликом то пусть заменяет, а если это будет вручную с просмотром, то хотелось бы ограничить количество найденных. В худшем случае первый вариант придётся делать каждый в отдельности, по крайней мере в сумме количество найденных всё равно будет минимально, без "а = 3".
    Я хочу исходники программирования привести к одинаковому виду, с пробелами вокруг операторов
     
    Вроде разгадал, надо заменить на " \1\2\3 ", остальные группы будут пустые.

    Всего записей: 4558 | Зарегистр. 03-05-2006 | Отправлено: 00:29 08-04-2019 | Исправлено: AZJIO, 00:39 08-04-2019
    YuS_2



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

    Цитата:
    примерно таким регулярным выражением


    Цитата:
    Я хочу исходники программирования привести к одинаковому виду, с пробелами вокруг операторов

    Не совсем понятно в чем сложность... но почему бы не сделать так:

    Код:
    Что: " *([=+<>-]) *"
    Чем: " \1 "

    - двойные кавычки здесь только для наглядности...
     
    Добавлено:
    только надо учесть наличие операторов типа:

    Цитата:
    !=
    ==
    и т.д.

    - они ведь не должны обрамляться пробелами внутри?

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 07:50 08-04-2019
    AZJIO



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

    Цитата:
    но почему бы не сделать так:
    как я уже сказал выше, потому что вручную хочу менять. Допустим в исходнике 1000 операторов и все правильные, и что вы пол-часа будете просматривать правильный исходник?
    При проверке руками сразу же столкнулся со случаями, когда менять одним кликом нельзя, например Notepad++ или линия ;=================, в общем текст в комментариях. Тогда придётся делать программно и определять является ли позиция символа внутри комментария.

    Цитата:
    только надо учесть наличие операторов типа:  
    у меня PureBasic, там нет != там <>, что учтено запретом предварительного и последующего повтора оператора, например таких комбинаций >> << <= =< >= =>. Для них нужен уже следующий регвыр, или думаешь сделать сразу так [=+<>]+.

    Код:
    (?mx)(?<!\h)([=+<>&|/-]++)(?!\h)   |   \h*([=+<>&|/-]++)(?!\h)    |    (?<!\h)([=+<>&|/-]++)\h*

    Я просто не тороплюсь, но я хочу сделать типа правильного форматирования, потому что встроенный вариант в IDE использует только выравнивание отступов по вложенности.
    Уже для запятых тоже пробовал

    Код:
    (?x)\h*?,(?!\h)   |   \h+?,\h*

    x, x (правильный)
    x,x
    x ,x
    x , x

    Цитата:
    " *([=+<>-]) *"
    лучше \h чтобы не исключать табы, хотя они и маловероятны вокруг операторов.

    Всего записей: 4558 | Зарегистр. 03-05-2006 | Отправлено: 14:43 08-04-2019 | Исправлено: AZJIO, 15:06 08-04-2019
    YuS_2



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

    Цитата:
    как я уже сказал выше, потому что вручную хочу менять.

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

    Цитата:
    При проверке руками сразу же столкнулся со случаями, когда менять одним кликом нельзя, например Notepad++ или линия ;=================, в общем текст в комментариях.

    это всё относится к вопросу правильного составления шаблона. И да, в этом случае, конечно, без предварительного анализа не обойтись...
     

    Цитата:
    или думаешь сделать сразу так [=+<>]+.

    Можно и так. Как вариант, для начала, можно что-то типа такого сделать: ссылка
    А для уточнения шаблона, необходимо, всё же, видеть все массивы текста для обработки...
     

    Цитата:
    Я просто не тороплюсь, но я хочу сделать типа правильного форматирования

    Это понятно...
     

    Цитата:
    лучше \h чтобы не исключать табы, хотя они и маловероятны вокруг операторов.

    Да, конечно. \h просто не везде поддерживается...

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 16:58 08-04-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 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