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

  • Автор темы Автор темы winni-pyx
  • Дата начала Дата начала

winni-pyx

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

Как сделать стандартными экшенами это, не используя коды на С# и другие пока не понятные мне вещи?
 
Вот такая регулярка - (?<={-Variable.Var1-}).*?(?={-Variable.Var2-})
 
  • Оценить
Реакции: winni-pyx
что то не получается. Вот смотрите, пример текста:
Переменная 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


Чего я не правильно сделал?
 
что то не получается. Вот смотрите, пример текста:
Переменная 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

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

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


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

5.jpg
 
потёр, сам себя исправил (?<=Фотографии\ со\ страницы\ сообщества)[\w\W]*?(?=Обувь\ наличие\ на\ 08/18/2015) так попробуй, у меня в тестере текст взял
 
Последнее редактирование:
ну или так
Переменная temp = Фотографии[^<]+сообщества
Переменная test = Обувь[^>]+2015
(?<={-Variable.Temp-})[\w\W]*?(?={-Variable.Test-})
 
ну или так
Переменная temp = Фотографии[^<]+сообщества
Переменная test = Обувь[^>]+2015

Смысл такое делать, если можно просто заэскейпить строку с любым содержимым и подставить в переменную, как и хотел ТС?
 
Смысл такое делать, если можно просто заэскейпить строку с любым содержимым и подставить в переменную, как и хотел ТС?
да я без смысла, в одном кубике просто без эскайп и дома
 
а если в переменных будет другое содержимое?
содержимое переменной ведь не с луны падает, ТС ведь тоже ставит экшен что ему конкретно надо вытащить в переменную, не думаю что он там одним экшеном заполняет переменные с разным содержанием со всего дома
 
ну не работает ((
 

Вложения

{-Variable.const-} а там в переменной что???
 
Друзья, ну подскажите почему у меня получается во такой результат:

Имеем текст:

<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="


Почему берется НЕ самое короткое значение, если в условиях регулярки это задано???
 
Берётся самое короткое, считается с начала текста - если бы дальше по тексту были ещё Носочки наличие на 08/19/2015 то их бы уже не захватывало, а считало до первого вхождения, как сейчас и происходит
 
  • Оценить
Реакции: winni-pyx
Берётся самое короткое, считается с начала текста - если бы дальше по тексту были ещё Носочки наличие на 08/19/2015 то их бы уже не захватывало, а считало до первого вхождения, как сейчас и происходит
спасибо, логику работы я понял теперь.

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

Или может кто нибудь подскажет другой способ как, находясь в группе в Вк, где есть перечень всех альбомов, зайти именно в тот альбом, который тебе нужен? Наличие самого альбома в группе я проверили через "поиск выделенного текста", а вот что дальше делать, если нужный альбом есть, не пойму. По идее нужно просто щелкнуть по этому найденому тексту, но как? Как его открыть? Конструктор действий мне скорее всего не поможет. Мне в голову пришел только способ через парсинг кода страницы с целью сформировать ссылку вида: https://vk.com/album-73103702_220030040
 
Вообще если нужны всегда цифры последнего альбома, т.е. указанное Вами "220030040", то можно такой регуляркой брать
(?<=this\.parentNode\.href='/album-\d+_)\d+?(?='")
номер совпадения выставить последний
 
  • Оценить
Реакции: winni-pyx
Вообще если нужны всегда цифры последнего альбома, т.е. указанное Вами "220030040", то можно такой регуляркой брать
(?<=this\.parentNode\.href='/album-\d+_)\d+?(?='")
номер совпадения выставить последний
класс! спасибо! Про то, что можно выбирать номер совпадения я и не знал.
 

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