Перейти из форума на сайт.Реклама на Ru.Board


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Регулярные выражения

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10

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

Uragan66



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

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

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

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

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

добавить :

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

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

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

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

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



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

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

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

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

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



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

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



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

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



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

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



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

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

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

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



Advanced 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>  

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



Advanced 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 - буду признателен за правильную регулярку.
 
 
 
 

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



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

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

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

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



Advanced 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>

Всего записей: 1160 | Зарегистр. 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> нужного уровня и удаляешь текст между позициями найденного.
 
Вот например я чистил накаченные с сайта веб-страницы оставляя только полезное содержимое, удаляя всякие меню, шапки, реквизиты, рекламные блоки, зная что они для этого сайта одинаковые. Подробнее

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



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

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

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

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

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

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



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

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

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

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

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

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

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

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

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



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

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


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

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

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

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

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

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



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

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

Junior 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

Всего записей: 186 | Зарегистр. 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

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

Страницы: 1 2 3 4 5 6 7 8 9 10

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru