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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gerxer
    Я вынужден согласится с regist123 в том что задача обозначена крайне плохо. Хотя бы взять из последнего:
    Цитата:
    Мне нужно находить число вида 4.4.1.3.1,
    как я могу догадываться этот набор цифр в перемешку с точками вы называете "числом" что не соответствует этому термину. Скорее это "абстрактный набор цифр и точек" но никак не число. По сути - помочь вам не представляется возможным из-за отсутствия грамотного описания задачи.
     
    Тут или исправляетесь и грамотно и понятно для каждого излагайте суть задачи, описывая каждый момент в мельчайших подробностях, либо - в шапке темы указан список материала для самостоятельного изучения регулярных выражений.
     

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 18:54 26-12-2019
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gerxer
    Используете тоже самое выражение, что привел выше, с той лишь разницей, что в места, где возможно наличие пробела вставляете выражение
    [ ]?
    означающее "0 или 1 пробел (то есть, пробел может быть, но, если есть, то только один". Тоже самое можно записать как
    [ ]{0,1}
    Этот метод более универсален, поскольку может указывать минимальное и максимальное число вхождений. Напр., [ ]{0,3} означает от 0 (нет пробела) до трех пробелов подряд.
     
    Ваш случай с "новым числом"
    (?<=[^0-9])4[ ]?\.[ ]?4[ ]?\.[ ]?1[ ]?\.[ ]?3[ ]?\.[ ]?1(?=[^0-9])
     
    Полагаю, вы не псевдографику редактируете, а потому рекомендую все пробелы в количестве более одного, пакетно заменить на один
    [ ][ ]+
    на
      (символ пробела)
    Если пробелы принципиальны (например, в коде) - как правило в начале строки, то их можно не трогать
    (?<![\n\r\t ])[ ][ ]+(?=[^ \n\r\t])
    на
      (символ пробела)

    Всего записей: 1366 | Зарегистр. 17-01-2011 | Отправлено: 10:03 27-12-2019 | Исправлено: Jonmey, 10:04 27-12-2019
    rvsn12

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как достать дату 01.11.19 из строки
    13:45.01.11.19.20,8.29,7  
    Из строки 00:15 01.07.07.25,0.42,2. дату получаю, а есть ли возможность одним выражением получить даты из этих двух строк?

    Всего записей: 60 | Зарегистр. 09-05-2006 | Отправлено: 23:04 27-12-2019 | Исправлено: rvsn12, 23:10 27-12-2019
    regist123



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

    rvsn12 написал(а)
    Цитата:
    Из строки 00:15 01.07.07.25,0.42,2.

    Извиняюсь, а в этой строке где именно дата?  
    Я правильно, понимаю что тут дата: 01.07.07 ?
     
    Добавлено:
    Попробуйте регулярку  

    Код:
    \d{2}:\d{2}(\.|\s)((\d{2}\.){2}(\d){2})

    в второй  группе  $2 - должна быть ваша дата.

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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 00:48 28-12-2019 | Исправлено: regist123, 01:17 28-12-2019
    rvsn12

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да в строке 00:15 01.07.07.25,0.42,2.  
    01.07.07 это дата. Не понял насчет $2. Из строки 00:15 01.07.07.25,0.42,2. получаю дату выражением  
    (\d\d\.\d\d\.\d\d), а как получить дату без точки из выражения 13:45.01.11.19.20,8.29,7
     
     
    Сделал так, получаю дату по вашему шаблону (\.|\s)((\d{2}\.){2}(\d){2}) с точкой или пробелом и удаляю их при добавлении в базу. Спасибо.

    Всего записей: 60 | Зарегистр. 09-05-2006 | Отправлено: 11:01 28-12-2019 | Исправлено: rvsn12, 11:53 28-12-2019
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rvsn12
    (?<=\d{2}:\d{2}[\. ])\d{2}\.\d{2}\.\d{2}(?=\.\d{2},\d\.\d{2},\d\.?)

    Всего записей: 1366 | Зарегистр. 17-01-2011 | Отправлено: 16:56 28-12-2019 | Исправлено: Jonmey, 16:58 28-12-2019
    rvsn12

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jonmey спасибо, все работает без преобразований!

    Всего записей: 60 | Зарегистр. 09-05-2006 | Отправлено: 19:25 28-12-2019
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rvsn12 написал(а)
    Цитата:
    Сделал так, получаю дату по вашему шаблону (\.|\s)((\d{2}\.){2}(\d){2}) с точкой или пробелом и удаляю их при добавлении в базу.

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

    Код:
    (?<=\d{2}:\d{2}(\.|\s))(\d{2}\.){2}(\d){2}

     
    Добавлено:
    rvsn12 написал(а)
    Цитата:
    Не понял насчет $2.

    Для общего развития про это можете почитать например здесь.

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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 20:04 28-12-2019 | Исправлено: regist123, 17:51 29-12-2019
    rvsn12

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    regist123 спасибо, с $2 тоже разобрался.

    Всего записей: 60 | Зарегистр. 09-05-2006 | Отправлено: 10:53 29-12-2019
    aequit

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В книги можно добавить:
    Майкл Фицджеральд - Регулярные выражения. Основы (2015)

    Всего записей: 192 | Зарегистр. 17-11-2005 | Отправлено: 10:53 06-01-2020
    totnetot



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

    Добавил.

    Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 00:39 08-01-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Что толку от названий если тут нет самих книжек.
     
    Andrew Watt, Beginning Regular Expressions 2005.pdf
    Introducing Regular Expressions_ Unraveling Regular Expressions, Step-by-Step, Fitzgerald.pdf
    J.Goyvaerts, S.Levithan, Regular Expressions Cookbook, 2nd ed.pdf
    Mastering Regular Expressions_ Powerful Techniques for Perl and Other Tools (2nd ed.) Friedl.pdf
    Mastering Regular Expressions_ Understand Your Data and Be More Productive (3rd ed.) Friedl.pdf
    Regular Expression Recipes for Windows Developers_ A Problem-Solution Approach.pdf
    Regular Expression, Pocket Reference, Regular Expressions for Perl, Ruby, PHP, Python, C, Java, and .NET (2nd ed.).pdf
    https://www108.zippyshare.com/v/hKvr07ij/file.html

    Всего записей: 1366 | Зарегистр. 17-01-2011 | Отправлено: 06:51 20-01-2020
    qw12



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

    Код:
     
    <p>
    фыв123123123
    111ooofffaaa
    hasyfd8y23hdu23d
    blablabla
    </p>
     
    <p>
    kasdkjlaskjdijqw
    kokoko
    </p>

     
    то есть:

    Код:
    строки со случайными данными
    предпоследняя строка, которую надо найти
    </p> # а вот это всегда на месте

    Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 15:03 23-01-2020 | Исправлено: qw12, 15:03 23-01-2020
    los

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vim
    "\sAb\s\|\sCd\s\|\sEf\s"
    выделяет Ab Cd Ef если перед и после них пробелы, пытаюсь сократить
    "\s\Ab\|Cd\|Ef\s" подхватывает первые две буквы из Abcd и т.п.
    Как правильно сократить?

    Всего записей: 7648 | Зарегистр. 08-09-2001 | Отправлено: 21:46 23-01-2020
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    qw12 написал(а)
    Цитата:
    предпоследняя строка, которую надо найти  
     </p> # а вот это всегда на месте

    Для строк в формате windows с учётом, что перед тегом </p> могут быть символы пробелов или табуляции

    Код:
    .*\r\n(?=(\s|\t)*</p>)

     
    Добавлено:
    los написал(а)
    Цитата:
    "\sAb\s\|\sCd\s\|\sEf\s"  
     выделяет Ab Cd Ef если перед и после них пробелы, пытаюсь сократить

    Если правильно понял задачу, то

    Код:
    \s(Ab|Cd|Ef)\s


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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 01:47 24-01-2020 | Исправлено: regist123, 01:48 24-01-2020
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    qw12
    Можно так
    (?<=[\n\r])[^\n\r]*(?=\s*</p>)

    Всего записей: 1366 | Зарегистр. 17-01-2011 | Отправлено: 06:10 24-01-2020
    los

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

    Цитата:
    Если правильно понял задачу, то  

    Да, правильно, но вариант предложенный вами не работает - я его пробовал ранее.

    Всего записей: 7648 | Зарегистр. 08-09-2001 | Отправлено: 09:22 24-01-2020
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    los написал(а)
    Цитата:
    вариант предложенный вами не работает - я его пробовал ранее.

    Тогда приведите конкретный пример данных (текста), где он не работает.
     
    Добавлено:
     

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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 13:05 24-01-2020
    los

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

    Цитата:
    Тогда приведите конкретный пример данных (текста), где он не работает.  

    выше приводил

    Цитата:
    подхватывает первые две буквы из Abcd и т.п.

    да и для vim нужно не "|", а "\|"
    и нашел где загвоздка вот так - работает.

    Код:
    \s\(Ab\|Cd\|Ef\)\s

    Всего записей: 7648 | Зарегистр. 08-09-2001 | Отправлено: 13:49 24-01-2020
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    los написал(а)
    Цитата:
    да и для vim нужно не "|", а "\|"

    Не знал, что vim это текстовый редактор. Как следствие не знал и его особенностей, а к примеру в Notepad++ (которым я пользуюсь) та регулярка отработала бы нормально.
    PS. на всякий случай оговорка для qw12 работа этой регулярки проверялась в Npp++
     
     
    Добавлено:
    Jonmey написал(а)
    Цитата:
    Можно так  
     (?<=[\n\r])[^\n\r]*(?=\s*</p>)

    в этом варианте такая особенность https://i111.fastpic.ru/big/2020/0124/03/3eb2215900363e359f86e150fd64f103.png
    Предположу, что это не то что изначально хотели.
    Буквы  ffff там вставил для наглядности, с пробелами не так наглядно  
       
    но возможно qw12 это устраивает. На всякий случай предупредил.


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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 14:23 24-01-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 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