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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    U235, YuS_2, спасибо. Что про \1-\9 забыл.

    Всего записей: 582 | Зарегистр. 04-06-2001 | Отправлено: 20:52 15-06-2018
    U235

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

    Всего записей: 724 | Зарегистр. 14-12-2005 | Отправлено: 20:57 15-06-2018
    YuS_2



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

    Цитата:
    можнои без запятой

    можно, конечно, всё пробовать, методом научного тыка, вот только вопрос в том, что требуется получить в итоге... в данном случае - нельзя, по условиям.
    Джеффри Фридл "Регулярные выражения" - изучайте, очень хорошая книга.

    Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 21:23 15-06-2018
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Прошу объяснить почему нельзя..?  
    По-моему, условие четыре и  более четырех подряд одинаковых символа включает в себя и ровно 4 подряд идущих символа автоматически. Разве не так? Или приведите контрпример.
    P.S. В условии было сказано найти строки целиком, а не выделить подстроки, соответствующие шаблону.

    Всего записей: 724 | Зарегистр. 14-12-2005 | Отправлено: 21:48 15-06-2018 | Исправлено: U235, 21:53 15-06-2018
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    U235 22:48 15-06-2018
    Цитата:
    В условии было сказано найти строки целиком, а не выделить подстроки, соответствующие шаблону.


    Код:
    .*([a-z0-9\.])\1{3,}.*


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

    Всего записей: 6814 | Зарегистр. 20-03-2009 | Отправлено: 00:12 16-06-2018
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    U235
    Насчет запятой вы правы, если ищется вся строка целиком.
    Другое дело, что qw12 не указал другие условия, например, чувствительность к регистру символов, чувствительность к непечатным символам, способ разбора текста (построчный, блоками, целиком), используемый синтаксис регэкспов. Все это влияет на вариант решения, которые могут предложить.
    Например, выражение
    ^[^\n\r]*([[:digit:][:lower:].])\1{3,}[^\n\r]*$
    тоже подходящее, если использовать соответствующий синтаксис, при этом оно чувствительно к регистру букв и учитывает разрывы строк, независимо от способа поиска, однако при замене не удаляет строки полностью, а оставляет перевод строки.

    Всего записей: 1173 | Зарегистр. 17-01-2011 | Отправлено: 02:57 16-06-2018 | Исправлено: Jonmey, 03:00 16-06-2018
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос такой:  
    Можно ли заменить в тексте цифру [1-8] на соответствующее число символов z?
    Пока использую 8 последовательных замен (sed-скрипт в 8 строк), но может быть можно как-то обойтись одним regexp'ом?
    Пример:
    1k6/8/3K4
    должно стать:
    zkzzzzzz/zzzzzzzz/zzzKzzzz
     
     
     

    Всего записей: 724 | Зарегистр. 14-12-2005 | Отправлено: 07:25 16-06-2018
    YuS_2



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

    Цитата:
    По-моему, условие четыре и более четырех подряд одинаковых символа включает в себя и ровно 4 подряд идущих символа автоматически.

    Это да, включает и подразумевается автоматически, но это неполная реализация условия.

    Цитата:
    В условии было сказано найти строки целиком, а не выделить подстроки, соответствующие шаблону.

    Про целиком ничего не сказано. И в условии ничего не сказано, что будет выполнятся с этими строками далее. Зато конкретно указано:

    Цитата:
    содержащие символы из набора [a-z0-9\.] идущие подряд 4 и более раз

    т.е. полного условия задачи нет, но есть конкретный паттерн, который требуется, вот потому и нельзя. А в телепатию играть - у нас тут есть уже специальный топик...
     
    И да, правильно составленный вопрос, обычно содержит около 50% ответа... но увы, это бывает только в идеальных случаях.
     
    Добавлено:
    U235  16-06-2018

    Цитата:
    но может быть можно как-то обойтись одним regexp'ом?

    Это вряд ли, чистым регэкспом это сделать не получится. Регэкспы не имеют возможности распознавания символа числа, именно как числа. Т.е. в данном случае, необходимо дополнительное действие, которое помещает найденный символ числа в позицию команды, которая в свою очередь отвечает за добавление определенного количества каких-либо символов. Например, через переменные скрипта.

    Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 07:31 16-06-2018 | Исправлено: YuS_2, 08:06 16-06-2018
    U235

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

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

    Не согласен. Задача была такая:

    Цитата:
     Как найти строки, содержащие символы из набора [a-z0-9\.] идущие подряд 4 и более раз?  

    Т.е.  речь про строки, а не паттерн, как часть строки.  
    Или  думаете что в варианте  с и без запятой будут разные множества строк?
    А если множества найденных строк полностью совпадают, то, получается, запятая, в данном конкретном случае, исходя из условий задачи, не обязательна.  
    Если бы задача звучала как "найти подстроки, содержащие символы из набора [a-z0-9\.] идущие подряд 4 и более раз   и/или заменить на что-то" тогда запятая обязательна.
     

    Цитата:
    Т.е. в данном случае, необходимо дополнительное действие, которое помещает найденный символ числа в позицию команды, которая в свою очередь отвечает за добавление определенного количества каких-либо символов. Например, через переменные скрипта.

    Со скриптом и переменными  понятно.. Жаль, значит оставлю все как уже есть.  

    Цитата:
    Джеффри Фридл "Регулярные выражения" - изучайте, очень хорошая книга.

    Спасибо, посмотрю.
     
     
     
     

    Всего записей: 724 | Зарегистр. 14-12-2005 | Отправлено: 08:41 16-06-2018
    YuS_2



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

    Цитата:
    Не согласен.

    Тут дело не в согласии или несогласии. Вопрос в том, что подразумевал задавший вопрос, при том, что ни инструмента, ни конечной цели не озвучено, а т.к. у задачи есть конкретное условие для паттерна, то соответственно, этот паттерн составляется строго по этому условию.  
    А для чего используется шаблон, для поиска целой строки или подстроки - это вторично. Во всяком случае, в данном разделе.

    Всего записей: 3199 | Зарегистр. 03-02-2009 | Отправлено: 10:00 16-06-2018
    regist123



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


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

    Всего записей: 6814 | Зарегистр. 20-03-2009 | Отправлено: 12:25 16-06-2018
    qw12



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

    Код:
    \b[a-z0-9][a-z0-9._+-]*[a-z0-9]@[a-z0-9]+([a-z0-9\-\.]+[a-z0-9])?\.(aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mf|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw)\b

    Да, он не проверяет все домены первого уровня, их гораздо больше перечислено на сайте iana, но все страны + все основные международные перечислены.
     
    Что скажите? Что бы вы изменили и почему? В чем недостатки этого монстра? Как будет сжирать память и чем это чревато? Сильно ли большая разница в скорости при обработке громадных списков (десятки Гб) по сравнению со скучным и некорректным
    Код:
    \b[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}\b
    ?

    Всего записей: 582 | Зарегистр. 04-06-2001 | Отправлено: 12:33 20-06-2018
    VVL99

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

    Код:
    /^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$/

    кроме кириллицы!
    Вот с кириллицей, тоже нужно проверять:

    Код:
    /^([а-яa-z0-9_\.-]+)@([а-яa-z0-9_\.-]+)\.([а-яa-z\.]{2,6})$/

    Ещё вариант:

    Код:
    /^([\w\d_\.-]+)@([\w\d_\.-]+)\.([\w\.]{2,6})$/

    Эти находит:

    Цитата:
    sdf_99@sdff.ru
    sdff345@yzn_dex.ru
    sdff@gmail.com
    asdfasdf@asdfdf.ko.kz
    иван@марья.рф


    ----------
    Гомосексуальность среди модераторов не является психическим расстройством, несмотря на синонимы этого понятия в русском языке.

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 18:08 20-06-2018 | Исправлено: VVL99, 18:28 20-06-2018
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, нужную регулярку. Необходимо удалить все пробелы и дефисы после первого пробела. Дано:

    Цитата:
    word test-test test test

    нужно:

    Цитата:
    word testtesttesеtest

    Премного благодарю!

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 09:34 24-06-2018 | Исправлено: Hjkma, 09:35 24-06-2018
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Hjkma
    Можно использовать, например, два подхода
    - трехшаговый: 1. заменить первый пробел на любую "уникальную комбинацию символов". 2. удалить все оставшиеся пробелы и дефисы. 3. Заменить "уникальную комбинацию" на пробел.
    - использовать замену типа ^([^ ]+ [^ -]+)[ -]+ на \1 в цикле (до нулевого количества замен)

    Всего записей: 1173 | Зарегистр. 17-01-2011 | Отправлено: 12:21 24-06-2018
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma
    всегда начинается со слова?

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

    Всего записей: 6814 | Зарегистр. 20-03-2009 | Отправлено: 15:26 24-06-2018
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если использовать gnu sed, то можно так:
     
    Код:
    sed 's/[ -]//2g'

    Это если пробел идет раньше дефиса.
    Или в 2 этапа:
    Удаление дефисов
     
    Код:
    sed 's/-//g'

    Удаление пробелов
     
    Код:
    sed 's/ //2g'

    Всего записей: 724 | Зарегистр. 14-12-2005 | Отправлено: 17:55 24-06-2018 | Исправлено: U235, 18:02 24-06-2018
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jonmey
    Спасибо!
    regist123
    Да, всегда со слова.
    U235
    Спасибо! Посмотрю как можно использовать sed.

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 23:39 24-06-2018
    totnetot



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

    Цитата:
    Необходимо удалить все пробелы и дефисы после первого пробела.

     
    Эта регулярка находит подстроку, соответствующую данному условию:

    Код:
    (?<= ).*

    Дальше дело техники.

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 03:30 25-06-2018
    qw12



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

    Код:
    (?<=pattern)

     
    Как это можно на диалекте Rust написать? Официально - не поддерживает ни Lookahead ни Lookbehind. На гитхабе и stackoverflow ведутся какие-то обсуждения, но честно говоря, понятного мало.
     
    Например, мне нужно найти часть строк после первого : или ;

    Код:
    (?<=[;:]).*

    21312312:45234534
    blablabla;abaracadabra
     
    Это прекрасно работает на разных библиотеках, в том числе и RCRE, но Rust в их число не входит. Зачем - очень понравилась скорость и мощь ripgrep, но у него своеобразный синтаксис.

    Всего записей: 582 | Зарегистр. 04-06-2001 | Отправлено: 15:47 27-06-2018 | Исправлено: qw12, 15:50 27-06-2018
    Открыть новую тему     Написать ответ в эту тему

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