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

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

Открыть новую тему     Написать ответ в эту тему

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
    YuS_2



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

    Цитата:
    выделяет ip, что нужно добавить чтобы выделяло еще и cidr?

    Если говорить именно о валидных IP и CIDR, то примерно так:

    Код:
    \b((2[0-5][0-5]|1?\d\d?)\.){3}(2[0-5][0-5]|1?\d\d?)\b(\/(\d|[1-2]\d|3[0-2])\b)?(?!\/)

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 09:27 16-12-2018
    los

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2,
    спасибо, почти то, что нужно, но для просто ipv4
    999.999.999.999
    101.200.81.187
    103.19.89.118
    103.230.84.239
    103.4.52.150
    103.7.59.135
    104.247.219.41
    109.127.8.242
    109.229.210.250
    111.111.111.111
    192.168.0.1 test
    1.1.1.1.1
    пропускает некоторые ip и подхватывает первые 4 для 1.1.1.1.1
       
     

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 12:45 16-12-2018
    YuS_2



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

    Цитата:
    пропускает некоторые ip

    а, да, косяк в шаблоне... надо так:

    Код:
    \b((25[0-5]|2[0-4]\d|1?\d\d?)\.){3}(25[0-5]|2[0-4]\d|1?\d\d?)\b(\/(\d|[1-2]\d|3[0-2])\b)?(?!\/)


    Цитата:
    подхватывает первые 4 для 1.1.1.1.1

    а вот тут... с точки зрения валидности, это вполне себе IP...
    В данном случае требуется четкое определение: чем должен заканчиваться валидный IP(/CIDR), либо наоборот, чем НЕ должен заканчиваться и в соответствии с этим уже скорректировать lookbehind часть шаблона, т.е. вот это:

    Код:
    (?!\/)

    и если это не javascript, а PCRE, то и lookahead тоже придется задействовать, т.е. обязательно учитывать то, с чего должен начинаться или НЕ должен начинаться валидный IP...
    Для частного случая, примерно так:

    Код:
    (?<!\.)\b((25[0-5]|2[0-4]\d|1?\d\d?)\.){3}(25[0-5]|2[0-4]\d|1?\d\d?)\b(\/(\d|[1-2]\d|3[0-2])\b)?(?!\/|\.)

     
    Добавлено:
    А для ускорения процесса работы регэкспа, в случае с PCRE, я бы вообще сделал так:

    Код:
    (?<!\.)\b(?:(?>25[0-5]|2[0-4]\d|1?\d\d?)\.){3}(?>25[0-5]|2[0-4]\d|1?\d\d?)\b(\/(?>3[0-2]|[1-2]\d|\d)\b)?(?!\/|\.)

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 15:05 16-12-2018 | Исправлено: YuS_2, 15:17 16-12-2018
    los

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2,
    да, для PCRE - оптимальный вариант.

    Цитата:
    (?<!\.)\b(??>25[0-5]|2[0-4]\d|1?\d\d?)\.){3}(?>25[0-5]|2[0-4]\d|1?\d\d?)\b(\/(?>3[0-2]|[1-2]\d|\d)\b)?(?!\/|\.)

    Спасибо. Оно.
    А у вас нет такого же, но с перла… с перламутровыми пуговицами?
    если не трудно - отдельно для IP и для CIDR? Для IP, думаю, у самого получится на вашем примере, а для CIDR точно запутаюсь.
    P.S.
    Случайно для sed у вас подобного шаблона нет?

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 17:24 16-12-2018
    YuS_2



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

    Цитата:
    А у вас нет такого же, но с перла…

    а... хмм... PCRE - это что?
     

    Цитата:
    если не трудно - отдельно для IP и для CIDR?

    не совсем понятно, что требуется? Уточните...
     

    Цитата:
    Случайно для sed у вас подобного шаблона нет?

    sed, если не ошибаюсь, не умеет lookaround-ы, но можно примерно так:

    Код:
    sed -rn "/(^|\s)\b((25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b(\/(3[0-2]|[1-2][0-9]|[0-9])\b)?(\s|$)/p"

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 19:55 16-12-2018
    los

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

    Цитата:
    не совсем понятно, что требуется? Уточните...  

    с данным шаблоном выделяются как IP так CIDR.
    было бы здорово еще иметь отдельно шаблон для IP и отдельно для CIDR.
    шаблон для sed, увы, оставляет слово test.
    192.168.0.1 test  
    Но, в любом случае, - спасибо за помощь.

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 20:50 16-12-2018
    YuS_2



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

    Цитата:
    с данным шаблоном выделяются как IP так CIDR.
     

    Так ведь изначально это и требовалось. Вот:
     15-12-2018

    Цитата:
    сейчас  
    111.111.111.111 и т.п.  
    нужно еще и  
    111.111.111.111/24 и т.п.

    Вы уж определитесь с задачей-то
    И уточнение какое-то неоднозначное, пример приведите...

    Цитата:
    было бы здорово еще иметь отдельно шаблон для IP и отдельно для CIDR.

    т.е. что в итоге требуется получить от адреса и от адреса с cidr... типа этого:

    Код:
    192.168.0.1
    /8

    ?
     

    Цитата:
    шаблон для sed, увы, оставляет слово test.

    Формализуйте задачу и используйте подходящий под задачу инструмент. Что требуется получить в итоге? Строку содержащую IP/CIDR или исключительно сам IP/CIDR?
    Если последнее, то grep будет сподручнее использовать, например, так:

    Код:
    grep -E -o "(^| )\b((25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b(\/(3[0-2]|[1-2][0-9]|[0-9])\b)?( |$)"

    Но и sed вполне можно задействовать, только задачу необходимо уточнить...

    Код:
    sed -rn "s/((^|\s)\b((25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b(\/(3[0-2]|[1-2][0-9]|[0-9])\b)?(\s|$)).*/\1/p"

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 21:15 16-12-2018 | Исправлено: YuS_2, 21:21 16-12-2018
    los

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

    Цитата:
    Так ведь изначально это и требовалось

    Так аппетит же, он же гад во время еды приходит
    уточнение:
    есть
    2.2.2.2
    3.3.3.3/24
    сейчас по шаблону выбираются оба адреса.
    иногда требуется выбрать либо 2.2.2.2 либо 3.3.3.3/24

    Цитата:
    Но и sed вполне можно задействовать, только задачу необходимо уточнить...  

    в данный момент она очень проста есть файл
    _https://anonfile.com/m2rdScnfb4/block_rar
    нужно для скрипта(для файрвола) выбрать и 2.2.2.2 и 3.3.3.3/24, но задачи бывают меняются поэтому и хотелось иметь в запасе отдельные шаблоны для 2.2.2.2 и 3.3.3.3/24 под 2.2.2.2 подразумеваю IP, под 3.3.3,3/24 - CIDR.
     

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 22:16 16-12-2018
    YuS_2



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

    Цитата:
    иногда требуется выбрать либо 2.2.2.2 либо 3.3.3.3/24
    ...
    под 2.2.2.2 подразумеваю IP, под 3.3.3,3/24 - CIDR.

    IP

    Код:
    sed -rn "s/((^|\s)\b((25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b(\s|$)).*/\1/p"

    IP/CIDR

    Код:
    sed -rn "s/((^|\s)\b((25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b(\/(3[0-2]|[1-2][0-9]|[0-9])\b)(\s|$)).*/\1/p"

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 08:01 17-12-2018
    los

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2,
    благодарю.
    не глянете свежим взглядом?  
    sed для bsd несколько отличается от gnu sed.
    для IP

    Цитата:
    sed -n 's/^\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p'

    в отличие от вашего варианта подхватывает ip 3.3.3.3 из 3.3.3.3/24 что нужно добавить/изменить?
    IP/CIDR

    Цитата:
    sed -n 's/^\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\/[0-9]\{1,2\}\).*/\1/p'

    вроде бы в порядке, но свежий взгляд не помешает.

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 10:40 17-12-2018
    YuS_2



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

    Цитата:
    sed для bsd несколько отличается от gnu sed.

    гнутый sed:

    Код:
    sed -rn "s/((^|\s)\b((25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b(\/(3[0-2]|[1-2][0-9]|[0-9])\b)?(\s|$)).*/\1/p"

    аналог в негнутом:

    Код:
    sed -n "s/\(\(^\|\s\)\(\(25[0-5]\|2[0-4][0-9]\|1\?[0-9][0-9]\?\)\.\)\{3\}\(25[0-5]\|2[0-4][0-9]\|1\?[0-9][0-9]\?\)\(\/\(3[0-2]\|[1-2][0-9]\|[0-9]\)\)\?\(\s\|$\)\).*/\1/p"

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 11:30 17-12-2018
    los

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

    Цитата:
    аналог в негнутом:

    увы, для macOS не работает.

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 12:39 17-12-2018
    YuS_2



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

    Цитата:
    для macOS

    Тут я помочь не могу, нет её у меня.
     
    Добавлено:
    кстати, гугль говорит, что под macOS существует gnu-sed... используйте его...

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 14:13 17-12-2018
    los

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2,
    в любом случае - огромное спасибо, здорово помогли.

    Цитата:
    кстати, гугль говорит, что под macOS существует gnu-sed... используйте его...

    их есть у меня ©
    буду пытаться "доработать" этот вариант

    Цитата:
    sed -n 's/^\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p'

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 14:32 17-12-2018
    YuS_2



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

    Цитата:
    этот вариант

    этот вариант легко захватит как валидные, так и невалидные IP

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 07:31 18-12-2018
    los

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2,
    так и есть. Пытался разобраться почему не работает для не gne sed ваш шаблон:
    если не врут, то из-за 2 моментов \? нужно изменить на {0,1\} и \| - а этот - увы.

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 09:46 18-12-2018
    YuS_2



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

    Цитата:
    Пытался разобраться почему не работает для не gne sed

    Чем разбираться в этом зоопарке версий и почему вдруг не работает, да и в сонме самих утилит, лучше установить powershell core for macOS. Там и регэкспы работают нормально, да и с остальным функционалом, упростится реализация различных хотелок.

    Всего записей: 3206 | Зарегистр. 03-02-2009 | Отправлено: 11:31 18-12-2018
    los

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

    Цитата:
    Чем разбираться в этом зоопарке версий и почему вдруг не работает

    просто как в старом анекдоте - а у меня есть время и вдохновение ©

    Цитата:
     лучше установить powershell core for macOS. Там и регэкспы работают нормально

    Нет, спасибо. gnu grep, ripgrep ваш шаблон понимают, gnu sed есть, так что пока хватит.

    Всего записей: 4931 | Зарегистр. 08-09-2001 | Отправлено: 12:01 18-12-2018
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Нужна помощь. Нужно захватить пути файлов и разобрать по группам (capturing groups). При этом делаются две группы, первая захватывает все до "large\", "small\", "black-white\" или если их нет в путях, тогда просто до имени файла, а вторая захватывает все после.
    Поясню на примерах. Есть пути:

    Цитата:
    D:\favorites\description\file1.txt
    D:\favorites\description\small\file2.txt
    D:\favorites\description\large\file3.txt
    D:\favorites\description\large\black-white\file4.txt

     
    Нужно захватить так, чтобы в первой группе было:

    Цитата:
    D:\favorites\description\
    D:\favorites\description\
    D:\favorites\description\
    D:\favorites\description\

     
    а во второй группе было:

    Цитата:
    file1.txt
    small\file2.txt
    large\file3.txt
    large\black-white\file4.txt

    Не получается составить такую регулярку((

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 19:16 13-01-2019 | Исправлено: Hjkma, 19:19 13-01-2019
    sikemo

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    напр.,
     
    (?>(.+)(?>(large|small|black-white))\\)(.+)
     

    Всего записей: 1277 | Зарегистр. 27-11-2008 | Отправлено: 20:39 13-01-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

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


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru

    Рейтинг.ru