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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EmBroidery
    Все уже сделано до нас. Например (и масса другого материала по этой же теме легко гуглится):
    https://stackoverflow.com/questions/29434666/how-to-parse-and-capture-any-measurement-unit/29434667
    Подробнее

    Всего записей: 1319 | Зарегистр. 17-01-2011 | Отправлено: 00:43 26-03-2020
    EmBroidery

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

    Цитата:
    В первом выражении отрабатывает только (\d+) (при отсутствии слеша), т.к. всё остальное является необязательным.
    Во втором случае отрабатывает (\d*) - движок же смотрит назад от позиции!. Если слеша нет, то в эту группу попадают все имеющиеся цифры. Далее, наличие слеша игнорируется и отдаётся одна минимально необходимая цифра для первой группы

    Теперь стало понятно, спасибо.
     

    Цитата:
    Но на то они и диалекты, что имеются такие различия. Кстати, это - далеко не единственное.

    Могли бы вы подсказать, где можно подробнее с этим ознакомиться?
     
    Jonmey
    Предлагаемая мною задача не имела практического применения.
    Это лишь пример проблемы, с которой я мимоходом столкнулся и не мог для себя объяснить её природы.
     
    Высказанное вами мнение разделяю.

    Всего записей: 20 | Зарегистр. 31-03-2010 | Отправлено: 08:32 26-03-2020 | Исправлено: EmBroidery, 08:49 26-03-2020
    Romul81



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

    Цитата:
    Могли бы вы подсказать, где можно подробнее с этим ознакомиться?

    Comparison of regular-expression engines
    Regular Expressions Reference
    Конкретно по Javascript:
    http://www.regular-expressions.info/javascript.html
    Но надо учитывать, что это один из наиболее динамично развивающихся диалектов. В нём постоянно появляются новые фичи.
    Большинство из выше-приведённых материалов уже неактуальны, если говорить об этом диалекте.
    Поэтому лучше смотреть в документации для для NodeJS.

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 18:22 26-03-2020
    relictus

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    UPD: неактуально.
    Можно ли (и как) решить следующие задачи средствами регулярного выражения (PCRE)?
    1) Имеется построчный список (фамилия, имя, отчество) в верхнем регистре, некоторые могут быть сокращенные или состоять из более, чем трех слов, а также (не)иметь различные знаки препинания. Необходимо оставить первые буквы каждого слова в верхнем регистре, остальные преобразовать в нижний. Пример вариантов:
    ШАБАЗЯН АМАЯК АМЛЕТОВИЧ --> Шабазян Амаяк Амлетович    
    ФОМЕНКО А И --> Фоменко А И    
    МУРЗАЕВ НУР-МУХМЕД ЯГМУР-АЛИЕВИЧ --> Мурзаев Нур-Мухмед Ягмур-Алиевич    
    ХАСАНОВ М М --> Хасанов М М    
    ЗУБКО(ШАБАЛДАС) МАЙЯ ВИКТОРОВНА --> Зубко(Шабалдас) Майя Викторовна    
    ИБРАГИМОВ ХАЛИЛ РАСИМ ОГЛЫ --> Ибрагимов Халил Расим Оглы

     
    2) Имеется построчный список адресов (улица, дом, квартира), где улица всегда в верхнем регистре, может быть иметь сокращение или состоять из более, чем одного слова. Необходимо оставить первые буквы каждого слова улицы в верхнем регистре, остальные преобразовать в нижний. Часть адреса после 1-й запятой (т.е. после улицы) должна остаться неизменной. Пример вариантов:
    ЛИТЕЙНЫЙ, 34/1, кв.4 --> Литейный, 34/1, кв.4    
    50 ЛЕТ ВЛКСМ, 4/А, кв.10 --> 50 Лет Влксм, 4/А, кв.10    
    ЛЕНИНА ПЛ., 436, кв.3 --> Ленина Пл., 436, кв.3    
    К.МАРКСА, 8, кв.16 --> К.Маркса, 8, кв.16    
    КОНЕЧНАЯ СТАНЦИЯ, 26/2, кв.53А --> Конечная Станция, 26/2, кв.53А

     
    Доп.вопрос - можно ли составить одну регулярку на обе задачи, если оные решаются?

    Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 09:11 27-03-2020 | Исправлено: relictus, 10:18 29-03-2020
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    relictus
    у многих языков программирования есть такая функция. в общем случае регулярка не может изменять регистр.
    поэтому реализация зависит от конкретного языка.
     
    зы: если пофиг на чем и просто нужно копипастить текст - https://jsfiddle.net/htqrsya7/1/

    Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 09:16 27-03-2020 | Исправлено: Mavrikii, 10:33 27-03-2020
    relictus

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii
    Спасибо. На ЯП довольно легко решается, хотелось узнать возможность сделать это регуляркой (мало знаком). Но раз нет, так нет...

    Всего записей: 3716 | Зарегистр. 19-04-2005 | Отправлено: 10:40 27-03-2020
    los

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    relictus,
    для варианта с ФИО можно решить при помощи sed.

    Всего записей: 7341 | Зарегистр. 08-09-2001 | Отправлено: 13:00 27-03-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    relictus
    1. и 2. Можно. Но зависит от вашей цели - результат или метод вам нужен.
    Если раньше тут никто не сподобится, то пишите в ПМ, обсудим.

    Всего записей: 1319 | Зарегистр. 17-01-2011 | Отправлено: 17:30 28-03-2020
    VitRom

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    relictus, ВЛКСМ => Влксм таки неправильно есличо

    Всего записей: 3098 | Зарегистр. 18-06-2006 | Отправлено: 12:58 29-03-2020
    YuS 2



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

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:33 29-03-2020 | Исправлено: YuS 2, 14:33 29-03-2020
    fromes

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    При написании небольшого парсера поисковой системы возникал проблема с регулярным выражением:
     
    Есть регулярное выражение для парсинга HTML страницы:
     
    var pattern = @
    <div class="A(.*?)(href=")(?<href>.*?)"(.*?)<div class="B">(?<anchor>.*?)<.*?><div class="C yDYNvb">(?<sniplet>.*?)</div>
     
    при парсинге страницы все работает.
     
    Но если происходит смена дизайна на странице, например: <div class="B заменяется на <div class="K ,то происходит Catastrophic backtracking и начинает зависать парсер.
     
    Задача: подкорректировать регулярное выражение так, чтобы в выше указанном случае смены дизайна страницы не происходило возврата Catastrophic backtracking, а парсер просто переставал искать (Ничего не найдено или ошибка)
     
     
    Заранее благодарен за помощь

    Всего записей: 1 | Зарегистр. 09-04-2020 | Отправлено: 17:45 09-04-2020
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    fromes
    Какой язык/библотека используются для парсинга?
    Примеры оригинальной страницы (где находится резльтат) и изменённой (где не должен находиться) тоже желательны.
    Безотносительно этого - HTML регулярными выражениями не парсится.

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 22:25 09-04-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    fromes
    Потому что
    .* - крайне опасное выражение, особенно при парсинге html страниц. Я писал об этом выше.
    А в вашем выражении их - аж 6 штук.
    То есть, потенциальное количество вариантов для достаточной сложной и большой по размеру страницы может быть невероятным, отсюда и почти бесконечный бэктракинг при малейшем изменении страницы.
    Нужно учиться писать регэкспы без этого выражения, тогда таких проблем не возникнет.
    При простых построчных обработках в текстах использование этого выражения не столь критично, но априори его использование приводит к самому медленно выполняемому регэкспу.
    Для HTML с его плавающими переносами/разрывами строк, количества пробелов/табуляций, нередко неоднообразными окончаниями строк и т.д. подобные "слепые" выражения в регэкспах - всегда чреваты.

    Всего записей: 1319 | Зарегистр. 17-01-2011 | Отправлено: 08:12 10-04-2020 | Исправлено: Jonmey, 08:13 10-04-2020
    VladimirErshoff

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вроде задача простая, но я новичок и сообразить не могу. Нужно взять все до знака "=", исключая сам знак. Например
    из
    "Value"="Deny"
    нужно получить
    "Value"
    т.е. не удалить все, что после "=" вместе с ним (это я могу), а взять все до.

    Всего записей: 16 | Зарегистр. 09-04-2020 | Отправлено: 06:32 13-04-2020 | Исправлено: VladimirErshoff, 06:47 13-04-2020
    Mavrikii

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VladimirErshoff
    (.+)=
    а еще, в зависимости от языка, можно просто взять строки и разбить ее по =, после чего взять первый элемент массива

    Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 06:46 13-04-2020 | Исправлено: Mavrikii, 06:47 13-04-2020
    VladimirErshoff

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii
    Так он вместе с = забирает. А с разбиением то понятно, но хочется узнать как регуляркой взять.

    Всего записей: 16 | Зарегистр. 09-04-2020 | Отправлено: 07:01 13-04-2020
    Mavrikii

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

    Цитата:
    Так он вместе с = забирает

    и делает группировку того, что до  
    в чем используете, не можете группу взять отдельно?
     
    можно так
    [^=]+

    Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 07:02 13-04-2020 | Исправлено: Mavrikii, 07:04 13-04-2020
    VladimirErshoff

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii
    Да, вот так получилось. C#

    Код:
    string MyParam = Regex.Match(MyLine, "[^=]+").ToString().Trim();

    Всего записей: 16 | Зарегистр. 09-04-2020 | Отправлено: 07:12 13-04-2020
    Mavrikii

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

    Цитата:
    C#

    Общая теория, включая группы
    https://professorweb.ru/my/csharp/charp_theory/level4/4_10.php

    Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 07:14 13-04-2020
    VladimirErshoff

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mavrikii
    Спасибо. Меня вот интересует из шпаргалки в шапке

    Цитата:
    (?=...) - группа не входящая в поиск, но проверяющая совпадение образца справа, например (Text)(?=Text)

    Можно ли в данном случае применить или нет? Не получается.

    Всего записей: 16 | Зарегистр. 09-04-2020 | Отправлено: 07:27 13-04-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