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

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



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma 13:01 04-02-2017
    Цитата:
    регулярка не работает с таким строками:  die Die Hard  Die Hard die  Die Hard

    Из этих трёх примеров не работало только с последним. Ошибку понял, поправил

    Код:
    (^|(.*\W))Die\WHard((\W.*)|$)

     
    Vitus_Bering 13:05 04-02-2017
    Цитата:
    Поставленная задача не решаема с использованием \w

    Как видите решаема :).

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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 12:11 04-02-2017 | Исправлено: regist123, 12:16 04-02-2017
    Hjkma

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

    Цитата:
    die Die Hard

    но не на

    Цитата:
     
    Die Hard die
    Die Hard
     

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 12:15 04-02-2017
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma 13:15 04-02-2017
    Цитата:
    но не на  Цитата:   Die Hard die  Die Hard

    У меня работает, не понятно чем это отличается. И там в посте я изначально вертикальный слеш сначала пропустил, позже отредактировал добавил.  
    Upd. судя по времени написания поста вы тестировали, то того как поправил. Тот вариант был с ошибкой и поэтому с ним не работает, пробуйте сейчас.

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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 12:18 04-02-2017 | Исправлено: regist123, 12:22 04-02-2017
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    regist123
    Еще раз скопировал - теперь работает. Спасибо.

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 12:28 04-02-2017
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma 12:00 04-02-2017
    Цитата:
    Еще вопрос. А как это сделать с несколько запросами? Чтобы искать не только Die Hard, а еще например Terminator 2.

    Раз на примере одного запроса разобрались, то попробуем с двумя :)

    Код:
    (^|(.*\W))((Die\WHard)|(terminator\W2))((\W.*)|$)

    Принцип думаю понятен, если что аналогично |(terminator\W2) допишите ещё один запрос.

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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 12:39 04-02-2017 | Исправлено: regist123, 12:41 04-02-2017
    Hjkma

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

    Цитата:
    die Die Hard
    Terminator 2
    Hard Die
    Die Hard die
    Die Hard
    EDie Hard
    Die Hard

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 12:49 04-02-2017 | Исправлено: Hjkma, 12:50 04-02-2017
    regist123



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma
    с закладками подтверждаю, но думаю об этом уже надо баг-репортить разработчику.
    А вот по поводу замены (по крайней мере на этом примере) у меня работает нормально. Может вы случайно два раза нажали на кнопку заменить?

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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 13:53 04-02-2017
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    regist123
    Не из той вкладки скопировал
    На этих строках замена почему-то работает не корректно

    Цитата:
    Die Hard die
    Die Hard
    e Die hard
    Die Hard 2
    Hard Die Hard

     
    Upd. И первый вариант тоже не корректно заменял. Понял почему так - когда копируешь из ру-борда, в конце строк вставляются пробелы (которых в исходных вариантах не было) и с этими строками заменяет нормально. Попробуйте удалить пробелы в конце строк - регулярка начнет не корректно с этими строками работать.

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 14:10 04-02-2017 | Исправлено: Hjkma, 14:16 04-02-2017
    regist123



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

    Код:
    (^|(.*\W))((Die\WHard)|(terminator\W2))((\W.*$)|$)

    До этого если не в конце строки, то захватывало ещё и переход строки и из-за этого был этот глюк. Сейчас вроде нормально работает.

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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 16:26 04-02-2017
    Hjkma

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

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 04:22 05-02-2017
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще вопрос знатокам. А как можно слить строки, начинающие с определенного слова и строки, идущие внизу до начала строки, начинающую тоже на это слово? Запутано несколько, но выразить это попонятнее сложно. Попробую на примере. Есть строки:
    blog_paramparamparam
    status_paraprapapra
    date_12:11:2014
    online_off
     
    blog_ramparamparam
    status_raspraspras
    date_14:11:2012
    online_on
    Нужно чтобы все строки, начинающие с слова blog_ объединились с строками внизу идущие до начала строки, начинающую на blog_. И да, на месте, где раньше были переносы строк, должны быть пробелы, дабы слова не сливались.
    Как это должно быть:
    blog_paramparamparam status_paraprapapra date_12:11:2014 online_off
    blog_ramparamparam status_raspraspras date_14:11:2012 online_on
    Есть ли такая регулярка, решающая эту задачу?
    И да, уже пробовал в виде "\r\n" - "\s" и "(blog_)" - "\r\n\1", но проблема в том, что словосочетание "blog_" встречается и посреди строк и там не надо делать это началом новой строки, а нужно переносить строки, только начинающие на "blog_" и строки ниже до строк, начинающие "blog_".

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 07:33 06-02-2017 | Исправлено: Hjkma, 08:06 06-02-2017
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma
    "\r\n(?!^blog_)" заменить на пробел. Как-то так.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6092 | Зарегистр. 22-10-2005 | Отправлено: 20:58 06-02-2017
    sikemo

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    смутно конечно, но…
     
    во--первых ловите начало строки ^

    Цитата:
    но проблема в том, что словосочетание "blog_" встречается и посреди строк и там не надо делать  

     
    во-вторых, если надо сцеплять строки, — ловите через \1 \2, т.е. адресацией, а в заменить на что  укажите то, что «словили» и меж ними — пробел

    Всего записей: 1329 | Зарегистр. 27-11-2008 | Отправлено: 21:19 06-02-2017
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    Спасибо. Помогло.
    sikemo

    Цитата:
    если надо сцеплять строки, — ловите через \1 \2, т.е. адресацией, а в заменить на что  укажите то, что «словили» и меж ними — пробел

    Я не знаю как это технически прописать.

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 07:56 07-02-2017
    Vitus_Bering



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma
    \s*(\r\n)+(?!^blog_)
     

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 20:50 07-02-2017 | Исправлено: Vitus_Bering, 21:21 07-02-2017
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vitus_Bering
    Спасибо. Вроде по виду ваша регулярка лучше "\r\n(?!^blog_)".

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 22:08 07-02-2017
    Hjkma

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

    Цитата:
    [^a-zA-ZА-Яа-я0-9\s\.\-\_]

    смысл этой регулярки в том, что она удаляет из текста все символы, кроме тех символов, что в ней перечислены. Но хотелось бы удалять еще и точки, проблема в том, что нужно оставить точки перед расширений (примеры: ".gif",".exe",".dll"), а все остальные точки удаляются. Как это в регулярке прописать? Еще за точками с расширениями всегда следует пробел, может можно за это зацепиться. Буду очень благодарен за помощь, не хотелось превращать тему в персональное место для решения своих проблем, но и правда сейчас очень нужна эта регулярка.

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 16:34 09-02-2017 | Исправлено: Hjkma, 16:35 09-02-2017
    jFobos



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma
    Список расширений известный? Или просто точка и три символа после нее?

    Всего записей: 452 | Зарегистр. 03-12-2007 | Отправлено: 16:40 09-02-2017
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jFobos
    Да, три символа. И пробел всегда следует за расширениями.

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 16:44 09-02-2017
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma
    "[^a-zA-ZА-Яа-я0-9\s\-\_\.]|\.(?!\w{3}\s)". Как-то так.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6092 | Зарегистр. 22-10-2005 | Отправлено: 17:05 09-02-2017
    Открыть новую тему     Написать ответ в эту тему

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