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

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



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

    Цитата:
    вопрос в том, каким инструментом осуществляется замена... я например, пользуюсь AkelPad-ом

    YuS_2 , я пользуюсь Notepad++ , но здесь немного другое, замена прописывается в коде Rainmeter и во время работы скина он сам производит замену.
    Это скин чата с форума, хотелось вообще убрать смайлики, так как вебпарсер вместо смайлов возвращает ссылки на них.
    В коде райнметра замена прописывается так
    Код:
    "что заменить":"на что заменить"

    если всю ссылку менять частями, к примеру так :

    Код:
    <img src="http://alsiti.net/Smileys/default/':""

    добавить :

    Код:
    ' class="smiley" />':""

    то эти части ссылок убираются, но остаются коды смайликов, к примеру :

    Код:
    hihh.gif" alt="8&#41;" title="приветствую "

    они то в ссылках могут быть разные, вот и думалось как-то заменить эту часть ссылок на "что-либо"

    Всего записей: 35 | Зарегистр. 18-03-2012 | Отправлено: 18:04 04-05-2017
    YuS_2



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

    Цитата:
    В коде райнметра замена прописывается так

    Возможно, райнметр не поддерживает lookaround...
    Можно тогда пробовать так:

    Код:
    '\/[^\/]+\s*class=\"?smiley\"?\s*\/>':'/на что заменить class="smiley" />'

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 18:45 04-05-2017 | Исправлено: YuS_2, 18:48 04-05-2017
    Uragan66



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    YuS_2, так тоже не получается, райметер не видит этой замены. Наверное с заменой рег. выражение вообще у него не пройдёт.  
    Да и ладно, может как-то по - другому придумаю.
    Спасибо за внимание .

    Всего записей: 35 | Зарегистр. 18-03-2012 | Отправлено: 19:35 04-05-2017
    Weinaum



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

    Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 13:16 07-05-2017
    regist123



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

    Всего записей: 7198 | Зарегистр. 20-03-2009 | Отправлено: 15:07 07-05-2017
    YuS_2



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

    Цитата:
    чтобы не дублировать - вопрос из темы

    Здесь есть один нюанс: если div-ы имеют в своей структуре вложенные div-ы, то этот вопрос регэкспами не решается, ибо придет кирдык всей структуре. Если вложенных div-ов нет, то можно составить шаблон...

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 15:20 07-05-2017
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Weinaum
    Нужен второй опорный элемент, скажем, после дива "container" идёт всегда другой элемент с одним и тем же классом или иной от дива элемент (не встречающийся в "container").
     
    Добавлено:
    Скажем такая структура
    Код:
    <div class="container">  
        <div>
            ....  
            <div>
                ...  
            </div>  
        </div>  
        <div>
            ...  
            <div>
                ...  
            </div>  
            <div>
                ...  
            </div>  
        </div>  
    </div>  
    <div class="container2">
        ...  
        <div>
            ...  
        </div>
    </div>
    Рег:
    Искать:
    Код:
    ("container">).*(.</div>.*?"container2")
    Заменить на:
    Код:
    $1$2
    Результат:
    Код:
    <div class="container">
    </div>  
    <div class="container2">
        ...  
        <div>
            ...  
        </div>
    </div>  

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 17:15 07-05-2017 | Исправлено: VVL99, 17:43 07-05-2017
    Weinaum



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

    Цитата:
    Здесь есть один нюанс: если div-ы имеют в своей структуре вложенные div-ы, то этот вопрос регэкспами не решается, ибо придет кирдык всей структуре. Если вложенных div-ов нет, то можно составить шаблон...

    как раз вложенные дивы есть - в этом то и проблема...
     
    VVL99
     
    кажется, есть за что зацепиться -  перед закрывающимся дивом всегда закрывающий тег списка  
     - </ul>, a после всегда идут несколько отступов - <br>  
    правда там между ними пробелы и символы новой строки, что то не получается у меня...
     
    вот пример отрезка кода, где надо произвести изменения:
    Код:
    <header>
            <font color="#3953A4">
                   
            <a href="../index-2.html"><img style="border: medium none ; width: 100px; height: 166px;  position:absolute; top:3px; left:0px;" alt="MHV Schweinfurt 09" src="../pics/MHV_Logo.gif"></a>
    </header>
           <div class="container">
                <ul id="nav">
                    <li><a class="hsubs" href="#">Spielbetrieb</a>
                        <ul class="subs">    
                            <li><a href="../tables/2016-2017/Mannschaften_16-17.html">Mannschaften</a></li>
                            <li><a href="../tables/Gesamtspielplan.html">Spielplan</a></li>
                            <li><a href="../Document/Anfahrt.html">Anfahrtsbeschreibung</a></li>
                            <li><a href="../Document/Links.html">Links</a></li>
                        </ul>
                    </li>
                    <li><a class="hsubs" href="#">Aktuelles</a>
                        <ul class="subs">
                            <li><a href="Berichte.html">Berichte</a></li>
                            <li><a href="ARCHIV.html">Berichte-Archiv</a></li>
                            <li><a href="../Document/Termine.html">Termine</a></li>
                        </ul>
                    </li>
                    <li><a class="hsubs" href="#">Verein</a>
                        <ul class="subs">
                            <li><a href="../Document/Kontakt.html">Kontakt</a></li>
                            <li><a href="../Document/UnserWeg.html">Unser Weg</a></li>
                            <li><a href="../Document/Dokumente.html">Dokumente</a></li>
                            <li><a href="../Document/Foerderverein/Foerderverein.html">F&ouml;rderverein</a></li>
                            <li><a href="../Document/FC-Bad/FC-Bad.html">Main-Bad</a></li>
                            <li><a href="../Document/Ehrenmitglieder.html">Ehrenmitglieder</a></li>
                            <li><a href="../Document/Kopf-Fuss-Turniere.html">Kopf-Fu&#223;-Turniere</a></li>
                            <li><a href="../Document/Chronik/Abteilungsgeschichte.html">Chronik</a></li>
                            <li><a href="../Document/Impressum.html">Impressum</a></li>
                       </ul>
                    </li>
                    <li><a class="hsubs" href="../tables/2016-2017/Sponsoren.html">Sponsoren</a>
                    </li>
     
                 <div id="lavalamp"></div>
                </ul>
             </div>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>

    Нужно убрать весь header и весь container - буду признателен за правильную регулярку.
     
     
     
     

    Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 19:59 07-05-2017
    ALeXkRU



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

    Цитата:
    закрывающий тег списка  
     - </ul>, a после всегда идут несколько отступов - <br>  
    правда там между ними пробелы и символы новой строки

    <\/ul>\s+<\/div>\s+<br>  

    Всего записей: 11896 | Зарегистр. 03-12-2003 | Отправлено: 20:52 07-05-2017
    VVL99

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Weinaum
    Берём твой пример отрезка кода и применяем к нему следующий Рег:
    Искать:
    Код:
    (<header>).*($.*?</header>).*($.*?<div class="container">).*</ul>(.*?</div>.*?<br>)
    Заменить на:
    Код:
    $1$2$3$4
    Результат:
    Код:
    <header>
    </header>
           <div class="container">  
             </div>  
    <br>  
    <br>  
    <br>  
    <br>  
    <br>  
    <br>
    Но это только для данного примера, как это будет работать при другой разметке, не скажу.
    Для ясности, Рег:
    В скобках указываем те части кода, которые нам понадобятся для вставки. Каждой скобке будет соответствовать цифра по порядку со знаком $ или \.
    В первой скобке указываем открывающий тег <header>, далее любое количество символов. Во второй скобке указываем ближайший конец строки с возможными символами к закрывающему тегу </header>, далее любое количество символов. В третьей скобке тоже, что и во второй, только открывающий тег див с именем класса "container", далее любое количество символов до закрывающего тега </ul>, но в четвёртой скобке мы указываем, что этот тег </ul> должен быть ближайшим к закрывающему тегу </div> а тот должен быть ближайшим к тегу <br> с возможными между ними символами.
    Если разметка не нужна, то можно и так:
    Найти:
    Код:
    <header>.*</ul>(.*?</div>.*?<br>)
    Заменить на:
    Код:
    <header></header><div class="container"></div><br>

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 03:47 08-05-2017
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Weinaum
    Можно попробовать типа поиск необязательных вложенных div, типа (?:/s*?<div>.+?</div>/s*?)?
    если только двойные вложенности есть (?:/s*?<div>.+?(?:/s*?<div>.+?</div>/s*?)?.+?</div>/s*?)?
    если есть тройные вложенности <div>.+?(?:/s*?<div>.+?(?:/s*?<div>.+?</div>/s*?)?.+?</div>/s*?)?.+?</div>
    Это я как идею предлагаю, а не как решённый вариант. Кстати в регулярках есть рекурсия, может это про то?
    Но я бы с учётом знания авотит писал бы на нём. Смысл в следующем, находишь <div>, ставишь счётчик равным 1, после него ищешь <div> или </div>, если <div> то увеличиваешь счётчик на 1, если </div>, то уменьшаешь счётчик на 1. Как только счётчик равен нулю, то это нужный </div> нужного уровня и удаляешь текст между позициями найденного.
     
    Вот например я чистил накаченные с сайта веб-страницы оставляя только полезное содержимое, удаляя всякие меню, шапки, реквизиты, рекламные блоки, зная что они для этого сайта одинаковые. Подробнее

    Всего записей: 4567 | Зарегистр. 03-05-2006 | Отправлено: 08:02 08-05-2017 | Исправлено: AZJIO, 08:32 08-05-2017
    YuS_2



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

    Цитата:
    кажется, есть за что зацепиться -  перед закрывающимся дивом всегда закрывающий тег списка  
     - </ul>, a после всегда идут несколько отступов - <br>

    Зацепиться, оно конечно, можно... только ведь где гарантия, что таких контейнеров не будет 2,3,4 и т.д.? У них, у всех будет такая однозначная привязка к </ul>, т.е. нигде более в dom-структуре такого сочетания не встречается? Если да, тогда можно пытаться составлять шаблон...

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:30 08-05-2017
    DmitryFedorov

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Weinaum
    Практически и теоретически можно отталкиваться от отступа с начала строки.
    Т.е. в обычном коде открывающий  
    <div  
    всегда имеет тот же отступ что и закрывающий  
    </div>
    Забив этот отступ как условие поиска можно добиться однозначности замены без подсчета числа вложений и получить защиту от случайностей.
    Но это лишь в случае если код нарисован стандартно.
     
    Т.е. всё то же самое, но с дополнительным условием.
    Выклядеть это условие в поиске будет где-то так (по крайней мере в Np++):
     
    (^\s*)<div class="container">...бла-бла..\1</div>
     
    где (^\s*) = \1

    Всего записей: 2038 | Зарегистр. 19-03-2006 | Отправлено: 16:44 08-05-2017
    VVL99

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

    Код:
     
    (<header>).*?([^|$])(</header>).*?([^|$])(<div class="container">).*?</ul>.*?(</div>.*?<br>)
     
    $1$2$3$4$5$6

    Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 17:03 08-05-2017 | Исправлено: VVL99, 17:07 08-05-2017
    Hjkma

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

    Цитата:
    D:\Files\John Doe\Example.txt

    Мне не нужно такое находить.  
    А вот это мне как раз нужно:

    Цитата:
    D:\Files\Example\John Doe.txt

    Спасибо тому, кто предложит подходящую регулярку.

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 13:30 26-05-2017
    Abs62



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

    Код:
    \\John Doe(?:[^\\]*$)


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

    Всего записей: 6100 | Зарегистр. 22-10-2005 | Отправлено: 14:10 26-05-2017
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    Спасибо)
     
    Добавлено:
    Не получается прикрутить к регулярку [^a-z] перед и после John Doe, чтобы она не находила строки с словами вроде John Doed.
     
    То есть вот так:

    Цитата:
    \\.*[^a-z]John Doe[^a-z](?:[^\\]*$)

    Помечает вообще все.  
    Помогите отредактировать правильно регулярку.

    Всего записей: 242 | Зарегистр. 04-03-2015 | Отправлено: 14:42 26-05-2017
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hjkma
    Так опишите, что требуется полностью, тогда и регэксп будет более точным.

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 15:19 26-05-2017
    Hjkma

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Ну ладно примеры
    Что должно находить:

    Цитата:
    D:\Files\Example\John Doe.txt
    D:\Files\Example\1324 John Doe 123456.txt
    D:\Files\Example\John Doe 1234.txt
     

     
    Находить не должно:

    Цитата:
    D:\Files\Example\JaJohn Doe.txt
    D:\Files\Example\John DoeD.txt
    D:\Files\John Doe\Example.txt

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



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

    Код:
    \\(\w+\s+)*\bJohn Doe\b(?:[^\\]*$)


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

    Всего записей: 6100 | Зарегистр. 22-10-2005 | Отправлено: 17:28 26-05-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