вырезать кусок текста

winni-pyx

Client
Регистрация
16.01.2015
Сообщения
41
Благодарностей
3
Баллы
8
Коллеги, подскажите, какими средствами можно из текста (DOM страницы в Вконтакте) выдрать нужный мне абзац, который находится между двумя переменными? Регулярными выражениями, я так понимаю, что нельзя, т.к. регулярка это константное значение. А у меня в шаблоне сначала вычисляются переменные, а затем нужно из DOM выдрать абзац, который находится между этими переменными.

Как сделать стандартными экшенами это, не используя коды на С# и другие пока не понятные мне вещи?
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 911
Баллы
113
Вот такая регулярка - (?<={-Variable.Var1-}).*?(?={-Variable.Var2-})
 
  • Спасибо
Реакции: winni-pyx

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
escape переменных ещё сделать перед подстановкой в регулярку на всякий случай
 

winni-pyx

Client
Регистрация
16.01.2015
Сообщения
41
Благодарностей
3
Баллы
8
что то не получается. Вот смотрите, пример текста:
Переменная temp = Фотографии со страницы сообщества
Переменная test = Обувь наличие на 08/18/2015

<div class="ge_photos_album fl_l" title="Фотографии со страницы сообщества">Фотографии со страницы сообщества</div>

.......

"clear_fix" style="margin: 0px">
<div class="ge_photos_album fl_l" title="Обувь наличие на 08/18/2015">Обувь наличие на 08/18/2015</div>

5.jpg


Чего я не правильно сделал?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 453
Благодарностей
5 911
Баллы
113
что то не получается. Вот смотрите, пример текста:
Переменная temp = Фотографии со страницы сообщества
Переменная test = Обувь наличие на 08/18/2015

<div class="ge_photos_album fl_l" title="Фотографии со страницы сообщества">Фотографии со страницы сообщества</div>

.......

"clear_fix" style="margin: 0px">
<div class="ge_photos_album fl_l" title="Обувь наличие на 08/18/2015">Обувь наличие на 08/18/2015</div>

Посмотреть вложение 9147

Чего я не правильно сделал?
Так регулярка неправильная. Макрос переменной не прописан. Переменная заключается в фигурные скобки и дефисы
 
Последнее редактирование:

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
escape строки не сделали?
 

winni-pyx

Client
Регистрация
16.01.2015
Сообщения
41
Благодарностей
3
Баллы
8
Сделал эскейп переменных.
Взял ДОМ
Сделал эскейп ДОМа

Но регулярка все равно не срабатывает


Переменная temp = Фотографии\ со\ страницы\ сообщества
Переменная test = Обувь\ наличие\ на\ 08/18/2015

5.jpg
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
потёр, сам себя исправил (?<=Фотографии\ со\ страницы\ сообщества)[\w\W]*?(?=Обувь\ наличие\ на\ 08/18/2015) так попробуй, у меня в тестере текст взял
 
Последнее редактирование:

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
  • Спасибо
Реакции: VladZen

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
ну или так
Переменная temp = Фотографии[^<]+сообщества
Переменная test = Обувь[^>]+2015
(?<={-Variable.Temp-})[\w\W]*?(?={-Variable.Test-})
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
ну или так
Переменная temp = Фотографии[^<]+сообщества
Переменная test = Обувь[^>]+2015
Смысл такое делать, если можно просто заэскейпить строку с любым содержимым и подставить в переменную, как и хотел ТС?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Смысл такое делать, если можно просто заэскейпить строку с любым содержимым и подставить в переменную, как и хотел ТС?
да я без смысла, в одном кубике просто без эскайп и дома
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
а если в переменных будет другое содержимое?
содержимое переменной ведь не с луны падает, ТС ведь тоже ставит экшен что ему конкретно надо вытащить в переменную, не думаю что он там одним экшеном заполняет переменные с разным содержанием со всего дома
 

winni-pyx

Client
Регистрация
16.01.2015
Сообщения
41
Благодарностей
3
Баллы
8
ну не работает ((
 

Вложения

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
{-Variable.const-} а там в переменной что???
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
так не то же эскейпите
 

Вложения

  • Спасибо
Реакции: winni-pyx

winni-pyx

Client
Регистрация
16.01.2015
Сообщения
41
Благодарностей
3
Баллы
8

winni-pyx

Client
Регистрация
16.01.2015
Сообщения
41
Благодарностей
3
Баллы
8
Друзья, ну подскажите почему у меня получается во такой результат:

Имеем текст:

<div class="clear_fix" id="photos_albums_container"><div onmouseout="photos.thumbOut(this, '-73103701_220038482', true);" onmouseover="photos.thumbOver(this, '-73103702_220038482');" id="album-73103702_220038482" class="photo_row" style="cursor: move;"><div class="cont" style="z-index: 125;">
<a class="img_link " onclick="if (cur.cancelClick) return (cur.cancelClick = false); return nav.go(this, event)" ontouchmove="cancelEvent(event);" ontouchstart="event.cancelBubble = true;" href="/album-73103702_220038482">
<img src="https://pp.vk.me/c629413/v629413443/fc7e/WWwJxLZQltQ.jpg" />
<div title="Редактировать альбом" onmouseout="photos.thumbOut(this, '-73103702_220038482'); this.parentNode.href='/album-73103702_220038482'" onmouseover="photos.thumbOver(this, '-73103702_220038482', true); this.parentNode.href='/album-73103702_220038482?act=edit'" class="photo_album_info">
<div class="photo_album_info_back" style="opacity: 0;"></div>
<div class="photo_album_info_cont" style="opacity: 0;">
</div>
</div>
<div class="photo_album_title">
<div style="margin: 0px" class="clear_fix">
<div title="Обувь наличие на 08/19/2015" class="ge_photos_album fl_l">Обувь наличие на 08/19/2015</div>
<div class="camera fl_r">13</div>
</div>
<div class="description"></div>
</div>
</a>
</div><a class="bg"></a>
</div><div onmouseout="photos.thumbOut(this, '-73103702_220030040', true);" onmouseover="photos.thumbOver(this, '-73103702_220030040');" id="album-73103702_220030040" class="photo_row" style="cursor: move;"><div class="cont" style="">
<a class="img_link " onclick="if (cur.cancelClick) return (cur.cancelClick = false); return nav.go(this, event)" ontouchmove="cancelEvent(event);" ontouchstart="event.cancelBubble = true;" href="/album-73103702_220030040">
<img src="https://pp.vk.me/c629413/v629413443/fba1/9jZ2CZKy_QY.jpg" />
<div title="Редактировать альбом" onmouseout="photos.thumbOut(this, '-73103701_220030040'); this.parentNode.href='/album-73103702_220030040'" onmouseover="photos.thumbOver(this, '-73103702_220030040', true); this.parentNode.href='/album-73103702_220030040?act=edit'" class="photo_album_info">

<div class="photo_album_info_back" style="opacity: 0;"></div>
<div class="photo_album_info_cont" style="opacity: 0;">
</div>
</div>
<div class="photo_album_title">
<div style="margin: 0px" class="clear_fix">

<div title="Носочки наличие на 08/19/2015" class="ge_photos_album fl_l">Носочки наличие на 08/19/2015</div>

Жирным шрифтом я выделил то, что использую в качестве ограничителей.
А красным то, что мне хотелось бы увидеть в качестве результата выполнения регулярки.
Текст регулярки выглядит так: (?<=this\.parentNode\.href='/album-73103702_)[\w\W]*?(?=Носочки\ наличие\ на\ 08/19/2015)

НО результат у меня получается такой:

220038482'" onmouseover="photos.thumbOver(this, '-73103702_220038482', true); this.parentNode.href='/album-73103702_220038482?act=edit'" class="photo_album_info">
<div class="photo_album_info_back" style="opacity: 0;"></div>
<div class="photo_album_info_cont" style="opacity: 0;">
</div>
</div>
<div class="photo_album_title">
<div style="margin: 0px" class="clear_fix">
<div title="Обувь наличие на 08/19/2015" class="ge_photos_album fl_l">Обувь наличие на 08/19/2015</div>
<div class="camera fl_r">13</div>
</div>
<div class="description"></div>
</div>
</a>
</div><a class="bg"></a>
</div><div onmouseout="photos.thumbOut(this, '-73103702_220030040', true);" onmouseover="photos.thumbOver(this, '-73103702_220030040');" id="album-73103702_220030040" class="photo_row" style="cursor: move;"><div class="cont" style="">
<a class="img_link " onclick="if (cur.cancelClick) return (cur.cancelClick = false); return nav.go(this, event)" ontouchmove="cancelEvent(event);" ontouchstart="event.cancelBubble = true;" href="/album-73103702_220030040">
<img src="https://pp.vk.me/c629413/v629413443/fba1/9jZ2CZKy_QY.jpg" />
<div title="Редактировать альбом" onmouseout="photos.thumbOut(this, '-73103701_220030040'); this.parentNode.href='/album-73103702_220030040'" onmouseover="photos.thumbOver(this, '-73103702_220030040', true); this.parentNode.href='/album-73103702_220030040?act=edit'" class="photo_album_info">
<div class="photo_album_info_back" style="opacity: 0;"></div>
<div class="photo_album_info_cont" style="opacity: 0;">
</div>
</div>
<div class="photo_album_title">
<div style="margin: 0px" class="clear_fix">
<div title="


Почему берется НЕ самое короткое значение, если в условиях регулярки это задано???
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
Берётся самое короткое, считается с начала текста - если бы дальше по тексту были ещё Носочки наличие на 08/19/2015 то их бы уже не захватывало, а считало до первого вхождения, как сейчас и происходит
 
  • Спасибо
Реакции: winni-pyx

winni-pyx

Client
Регистрация
16.01.2015
Сообщения
41
Благодарностей
3
Баллы
8
Берётся самое короткое, считается с начала текста - если бы дальше по тексту были ещё Носочки наличие на 08/19/2015 то их бы уже не захватывало, а считало до первого вхождения, как сейчас и происходит
спасибо, логику работы я понял теперь.

А как же все таки можно из моего исходного текста выдернуть то, что мне нужно? Вообще мне нужна строка "220030040" - с этих символов начинается мой красный текст. Она нужна мне что бы можно было сформировать ссылку на альбом в группе и перейти по ней.

Или может кто нибудь подскажет другой способ как, находясь в группе в Вк, где есть перечень всех альбомов, зайти именно в тот альбом, который тебе нужен? Наличие самого альбома в группе я проверили через "поиск выделенного текста", а вот что дальше делать, если нужный альбом есть, не пойму. По идее нужно просто щелкнуть по этому найденому тексту, но как? Как его открыть? Конструктор действий мне скорее всего не поможет. Мне в голову пришел только способ через парсинг кода страницы с целью сформировать ссылку вида: https://vk.com/album-73103702_220030040
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
531
Баллы
93
Вообще если нужны всегда цифры последнего альбома, т.е. указанное Вами "220030040", то можно такой регуляркой брать
(?<=this\.parentNode\.href='/album-\d+_)\d+?(?='")
номер совпадения выставить последний
 
  • Спасибо
Реакции: winni-pyx

winni-pyx

Client
Регистрация
16.01.2015
Сообщения
41
Благодарностей
3
Баллы
8
Вообще если нужны всегда цифры последнего альбома, т.е. указанное Вами "220030040", то можно такой регуляркой брать
(?<=this\.parentNode\.href='/album-\d+_)\d+?(?='")
номер совпадения выставить последний
класс! спасибо! Про то, что можно выбирать номер совпадения я и не знал.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)