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

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

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

    Цитата:
    зачем нужна запятая после 20? {20,}

    Предыдущее выражение от 20 раз и более.  
     Если вам нужна строка между запрещенными символами ровно 20, то этот оператор выведет ее и все остальные, которые длиннее (от 20 символов до бесконечности).
    {x,y} - от х раз до у раз
    {x,} - от x до бесконечности
    {х} - х раз

    Всего записей: 437 | Зарегистр. 04-11-2018 | Отправлено: 11:01 06-07-2024
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PryMan, знакомый подсказал, что можно так:

    Код:
    re.findall(r'(?<![a-z0-9])[a-z0-9]{20}(?![a-z0-9])', s)


    Всего записей: 974 | Зарегистр. 14-12-2005 | Отправлено: 16:26 06-07-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    U235
    Цитата:
    PryMan, знакомый подсказал
    (?<![a-z0-9])[a-z0-9]{20}(?![a-z0-9])

    Если бы вы подняли глаза, то не пришлось бы беспокоить "знакомого" и дублировать сообщения

    Цитата:
    (?<![\x61-\x7a0-9])([\x61-\x7a0-9]){20}(?![\x61-\x7a0-9])
     
    https://regex101.com/r/FGFEXD/1
     
    versus
     
    [a-z0-9]{20,}
     
    https://regex101.com/r/0jHMcp/1

    http://forum.ru-board.com/topic.cgi?forum=33&topic=0472&start=1780#20

    Всего записей: 437 | Зарегистр. 04-11-2018 | Отправлено: 17:49 06-07-2024
    PryMan



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    Цитата:
    Предыдущее выражение от 20 раз и более. 
    спасибо за подробное пояснение, теперь вообще все понято!

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 21:17 06-07-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PryMan
    До кучи, чтобы не тревожить "знакомых", еще пару примеров, обеспечивающих тот же самый результат
     
    (?<=[^\x61-\x7a0-9])([\x61-\x7a0-9]){20}(?=([^\x61-\x7a0-9]))
    (?<=[^\x61-\x7a\d])[\x61-\x7a\d]{20}(?=[^\x61-\x7a\d])
    (?<![\x61-\x7a\d])[\x61-\x7a\d]{20}(?![\x61-\x7a\d])
    (?<![^\WA-Z_])[^A-Z_\W]{20}(?![^\WA-Z_])
    (?<=[\WA-Z_])[^A-Z_\W]{20}(?=[\WA-Z_])
     
    при этом во всех строках имеет место взаимозаменяемость выражений (всех или любого) в оба направления
     
    \x61-\x7a <=> a-z <=> \u0061-\u007a
    \x41-\x5a <=> a-z <=> \u0041-\u005a
     
    запись в виде \x00 удобна тем, что позволяет легко искать все 256 символов 8-ми битовых кодировок (напр., €‰™©‡®° и т.д.)
     
    запись в виде \u0000 удобна тем, что позволяет искать любые юникод символы (напр. иероглифы или арабскую вязь)
     

    Всего записей: 437 | Зарегистр. 04-11-2018 | Отправлено: 22:10 06-07-2024 | Исправлено: www_world, 22:12 06-07-2024
    PryMan



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Опять прошу помощи :)
     
    Нужно найти все ссылки на картинки .jpg в коде страницы (html), при условии, что в ссылке может быть всё-что-угодно (в пределах допустимого в html).
    Когда-то мне здесь помогли, предложив такое выражение -  

    Код:
    (\bhttps?\:[^ {}\[\]]+?\.jpg\b)

    и это отлично работало, пока не попались ссылки с пробелами.
    Суть этого выражения я не понял и все мои попытки сделать, чтобы оно ссылки с пробелами искало, провалились.
     
    Я, конечно, могу чего-нибудь наколхозить, типа [\W\w]+?, или прописать все возможные символы в выражение, но это плохо заканчивается. Или что-то пропускается, или захватывается лишнее.
     
    Помогите, плиз.
     
    Тест - https://regex101.com/r/BQyhiZ/2

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 11:15 13-07-2024
    Petrik_Pjatochkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PryMan
    ^ - это символ исключения, все символы которые следуют за ним исключаются. Первый же символ идущий после ^ это пробел. Вот его и нужно убрать из выражения.
    (\bhttps?\:[^{}\[\]]+?\.jpg\b)

    Всего записей: 771 | Зарегистр. 04-12-2007 | Отправлено: 11:33 13-07-2024
    PryMan



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Petrik_Pjatochkin
    Цитата:
    Вот его и нужно убрать из выражения.
    Понял, спасибо.
    Но тогда оно не работает, как надо. Видимо получается аналог [\W\w]+? и захватывается что-попало.
    В ссылке "Тест", в моём предыдущем посте, можно проверить.
     
    P.S.
    Вместо пробела поставил "\n". Ни в чём не уверен, но пока кажется, что работает.

    Код:
    (\bhttps?\:[^\n{}\[\]]+?\.jpg\b)

     
     
    P.P.S.
    Не, если код страницы не форматированный, нет переносов строк, то работает не корректно.
    Можно, конечно, отформатировать код страницы, запихнув его в BeautifulSoup, но тоже не факт.
     
    Видимо поиск универсального решения надо бросать :(

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 12:01 13-07-2024 | Исправлено: PryMan, 12:24 13-07-2024
    Petrik_Pjatochkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Попробуйте добавить в исключения двойные кавычки.
    (\bhttps?\:[^\"{}\[\]]+?\.jpg\b)

    Всего записей: 771 | Зарегистр. 04-12-2007 | Отправлено: 12:42 13-07-2024
    PryMan



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

    Цитата:
    добавить в исключения двойные кавычки
    Логично, кавычек в ссылках не бывает, на сколько я понимаю.
    Добавил и двойные и одинарные. Пока работает, буду тестить.
    Спасибо!

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 13:14 13-07-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PryMan
    Можно и так
    для прямых и относительных ссылок для jpg файлов с расширениием jpg
    (?<=[\" =])[^=\"<>]*\.jpg
    для прямых и относительных ссылок для jpg файлов с расширениями jpg  и jpeg
    (?<=[\" =])[^=\"<>]*\.jpe?g
     
    В принципе, возможны и ссылки с параметрами (...bla-bla-bla.jpg?bla-bla-bla...) и др. выборка которых зависит от сервера, то есть, как лучше их выбирать напрямую зависит от того, что собираются делать с этими ссылками потом.

    Всего записей: 437 | Зарегистр. 04-11-2018 | Отправлено: 20:18 13-07-2024
    PryMan



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world Вот, кстати, да. "*\.jpe?g" это полезно. Не догадался. Спасибо!
     
     
    P.S. А может быть можно и .png прикрутить? Чтобы за один проход и jpg и png найти. И ещё бы в не зависимости от регистра.
    Уж мечтать так мечтать :)

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 09:59 15-07-2024 | Исправлено: PryMan, 10:04 15-07-2024
    U235

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

    Код:
     
    (\bhttps?\:[^\"{}\[\]]+?\.(jpg|png)\b)
     

    Всего записей: 974 | Зарегистр. 14-12-2005 | Отправлено: 17:41 15-07-2024
    PryMan



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

    Цитата:
    (\bhttps?\:[^\"{}\[\]]+?\.(jpg|png)\b)

    Получается результат вот такого вида: ('https://server.com/bla-bla-bla.jpg', 'jpg')
     
    Уже хорошо, отбросит лишнее, оставив только ссылку, не проблема. Буду тестировать.

    Всего записей: 157 | Зарегистр. 01-08-2018 | Отправлено: 21:20 15-07-2024 | Исправлено: PryMan, 21:21 15-07-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PryMan
    (?<=[\" =])[^=\"<>]*\.(jpe?g|png)
    (?<=[\" =])[^=\"<>]*\.(jpe?g|png|gif)
    (?<=[\" =])[^=\"<>]*\.(jpe?g|png|gif|bmp)
    . . .
    https://regex101.com/r/C5gJae/1

    Всего записей: 437 | Зарегистр. 04-11-2018 | Отправлено: 21:28 15-07-2024 | Исправлено: www_world, 22:15 15-07-2024
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PryMan, можно еще так:
    \bhttps?\:[^\"{}\[\]]+?\.jpg\b|\bhttps?\:[^\"{}\[\]]+?\.png\b

    Всего записей: 974 | Зарегистр. 14-12-2005 | Отправлено: 21:49 15-07-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Вы, случаем, консольный (в сысле, работающий из ком. строки, а не с окном в консоли, как far и и др) редактор с регэкспами не собираетесь написать? Или уже писали?

    Всего записей: 437 | Зарегистр. 04-11-2018 | Отправлено: 19:20 19-08-2024
    AZJIO



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

    Цитата:
    не собираетесь написать?

    TextReplace - старая AutoIt3-версия поддерживает ком-строку без GUI, то есть когда переданы параметры (пути, регвыр), то окно не появляется и всё обрабатывается скрытно, только файлы обрабатываемые меняются. Я не слежу за этой темой, если что пишите в личку.

    Всего записей: 4536 | Зарегистр. 03-05-2006 | Отправлено: 08:21 07-09-2024 | Исправлено: AZJIO, 08:21 07-09-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    В пайпах случаем не работает? В батниках, имеется ввиду, после |
     
    Ну что это за название? Ну невозможно же найти ее в этих ваших интернетах. Всяких text-replacer'ov понаписано чуть более 100500 штук. При этом полноценные регэкспы из них поддерживает десятая часть или меньше. Консольных (хотя, это неправильно, поскольку консольные - это Far и Ko и редакторы тоже есть такие; правильно - cli редакторы) - существует на 3-4 порядка поменьше. Из них половина лишь поддерживает полноценные регэкспы. То есть, ваша программа относится к классу программ, число которых заведомо ниже 100 единиц во всех уголках света включая племена амазонии. Найти из них реально не более 20. Но при этом все они имеют своих тараканов. Так, чтоб найти и забыться - такой нет.
    С таким названием вашу - найти нереально. Ее как бы нет. Она существует лишь для избранных славянских шаманов и легенды о ней передаются исключительно изустно на отдельных междусобойных саммитах....
    У вас в программе главное что? Поддержка регэкспов и cli. Вот и надо называть отталкиваясь от этого + обязательно ник/фирма. Причем желательно длинное и короткое имена, например AZJIO CLI Regexp Processor (ACliRP; aclirp). Общеупотребимые слова в названии - типа text, replacer и т.д. - это слова-паразиты - они ничего не добавляют, ни в понимание сути программы, ни в ее поиске, если нет ничего другого, за что глаз или машина могли бы зацепиться. Если никак невозможно отказаться от подобных слов-паразитов, то нужно составлять из них невообразимые, пусть даже неправильные или корявые конструкции, Например, Cli Text Other Replacer (сокр. Clitor) - шанс, что такую программу забудут, встретив однажды - на несколько порядков ниже, чем унылый Text Replacer...
    И о программе. Подробно не изучал. Просто пару хотелок (не знаю, что там есть и чего нет ней). Подобная программа (то есть скриптово-неторопливая), как мне представляется, была бы полезна в батниках и т.п. в том числе интерактивных, когда скорости не принципиальны, важнее простота и функционал. Особенно учитывая. особенности встроенных виндовых средств. Поэтому, более-менее принципиальными возможностями в вашей програмее, которые позволят ее, действительно полноценно, использовать в скриптах, мне видятся
    - возможность полностью работать в комстроке
    - полноценная поддержка регэкспов - то есть всех (пусть один синтаксис, например, перловый, но полный)
    - поддержка pipe/stdin/stdout
    - поддержка работы с буфером обмена, хотя бы на уровне - считать из буфера/ вставить в буфер text
    - поддержка простейших файловых операций (с текстовыми файлами) - открыть файл/считать файл/вставить содержимое файла/вывести/добавить к файлу/...
    - поддержка трех основных кодировок - локаль (ansi) / utf8 / utf16, причем желательны автоматическое определение и работа последних двух без bоm'ов
    - поддержка цепочек операций (типа, напр. textreplacer.exe замена1; замена2; выборка1; вывод в stdout)
    - ...
    Из того, что навскидку вспомнилось из наболевшего.

    Всего записей: 437 | Зарегистр. 04-11-2018 | Отправлено: 09:03 07-09-2024 | Исправлено: www_world, 21:11 07-09-2024
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world, а классический sed почему вам не подходит?

    Всего записей: 974 | Зарегистр. 14-12-2005 | Отправлено: 09:58 07-09-2024
    Открыть новую тему     Написать ответ в эту тему

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