|
Помогите с шаблоном регулярного выражения | ☑ | ||
---|---|---|---|---|
0
prorokk
13.07.11
✎
11:23
|
Есть Строка:
<dl> <dt>Описание</dt> <dd>Защитный чехол предназначен для защиты планшетных компьютеров RoverPad с экраном 7» от внешних механических воздействий, загрязнения и пыли. <br /> Защитный чехол состоит из внешнего слоя, выполненного из полиуретана и внутреннего слоя, выполненного из поливинилхлорида. <br /> Внешний и внутренний слои скреплены нитяной строчкой. Со стороны внутреннего слоя под нитяную строчку закреплены четыре эластичные ленты, предназначенные для фиксации планшетного компьютера.</dd> <dt>Тип</dt> <dd>Чехол для планшетного ПК</dd> <dt>Размер экрана</dt> <dd>7"</dd> <dt>Число отделений</dt> <dd>1</dd> <dt>Материал</dt> <dd>Искусственная кожа</dd> <dt>Тип упаковки</dt> <dd>Oem</dd> <dt>Дополнительно</dt> <dd>Подходит для RoverPad 3W G70 и RoverPad 3W T70<br>Размеры защитного чехла в развернутом состоянии: 260</dd> <dt>Комплект поставки</dt> <dd>Чехол</dd> <dt>Размеры (Д х Ш х В)</dt> <dd>0 мм х 0 мм х 0 мм</dd> <dt>Размеры упаковки</dt> <dd>210 x 140 x 25 мм</dd> <dt>Вес упаковки</dt> <dd>0.125 кг</dd> <dt>Срок гарантии</dt> <dd>12 мес / сц</dd> </dl> и есть шаблон: "<dd>(.*?)</dd>" Цель выбрать все что между тегами...<dd> и </dd> Так вот он находит 11 совпадений, а нужно найти 12 Первое совпадение: <dd>Защитный чехол предназначен для защиты планшетных компьютеров RoverPad с экраном 7» от внешних механических воздействий, загрязнения и пыли. <br /> Защитный чехол состоит из внешнего слоя, выполненного из полиуретана и внутреннего слоя, выполненного из поливинилхлорида. <br /> Внешний и внутренний слои скреплены нитяной строчкой. Со стороны внутреннего слоя под нитяную строчку закреплены четыре эластичные ленты, предназначенные для фиксации планшетного компьютера.</dd> как я думаю является многострочным... А вот Как это описать в шаблоне?... |
|||
1
prorokk
13.07.11
✎
11:26
|
В другом случае где нужно было получить многострочный текст Писал так:
"<div id=""itemsmallfoto"">([\s\S]*)<div id=""mark-hint"">" |
|||
2
prorokk
13.07.11
✎
11:58
|
Если написать так <dd>([\s\S]*)</dd>
То выбирает весь текст до последнего </dd> :( |
|||
3
prorokk
13.07.11
✎
13:04
|
апну
|
|||
4
Happy Bear
13.07.11
✎
13:08
|
Создай html объект и через него вытащишь все из тегов
|
|||
5
Happy Bear
13.07.11
✎
13:09
|
ИМ себе делаешь?
|
|||
6
prorokk
13.07.11
✎
14:01
|
(5)ИМ это кто?
Побывал через DOM делать но ЧтениеHTML не на всех страницах работает... а чем его заменить нинаю( Делаю себе... |
|||
7
prorokk
13.07.11
✎
14:01
|
(6) Есть примеры?
|
|||
8
prorokk
13.07.11
✎
15:16
|
Попытка
Соединение=Новый HTTPСоединение("www.oldi.ru"); ИмяВременногоФайла=ПолучитьИмяВременногоФайла(".html"); Соединение.Получить("/catalog/element/"+КодТовара+Формат,ИмяВременногоФайла); ЧтениеHTML = Новый ЧтениеHTML; ЧтениеHTML.ОткрытьФайл(ИмяВременногоФайла,"windows-1251"); ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(ЧтениеHTML); ЭлементыTABLE = ДокументDOM.ПолучитьЭлементыПоИмени("dl"); Строки = ЭлементыTABLE[0].ПолучитьЭлементыПоИмени("dt"); Для каждого Стр из Строки Цикл Тип = стр.ТекстовоеСодержимое; Значение = стр.СледующийСоседний.СледующийСоседний.ТекстовоеСодержимое; Сообщить(""+Тип+": "+Значение+""); КонецЦикла; ЧтениеHTML.Закрыть(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Вообщем ничего не находит никаких элементов((( |
|||
9
prorokk
13.07.11
✎
15:18
|
Находит 3 <div>
|
|||
10
prorokk
13.07.11
✎
15:37
|
up
|
|||
11
Happy Bear
13.07.11
✎
15:40
|
Док = ЭлементыФормы.ПолеHTMLДокумента.Документ;
DIV = Док.all.tags("div"); Для й = 0 По DIV.length - 1 Цикл Если DIV.item(й).className = "duty" Тогда A = DIV.item(й).all.tags("a"); Для к = 0 По A.length - 1 Цикл МассивСсылок.Добавить(A.item(к).href); КонецЦикла; КонецЕсли; КонецЦикла; |
|||
12
Happy Bear
13.07.11
✎
15:42
|
+(11) кидаешь на форму ПолеHTMLДокумента, открываешь им ссылку и обрабатываешь тэги как в (11)
|
|||
13
prorokk
13.07.11
✎
15:42
|
(11) Спасибо буду пробовать...
|
|||
14
Happy Bear
13.07.11
✎
15:44
|
А ИМ - это интернет магазин. Как я понял, ты описания с картинками вытаскиваешь. А поиск по артикулу или универсальный (с другого сайта сможет скачать)?
|
|||
15
AquaKosh
13.07.11
✎
15:44
|
(2) У тебя жадная многострочка, попробуй так (?:[\s\S]*?).
|
|||
16
y88
13.07.11
✎
15:48
|
* удалить все переводы строк
* использовать модификатор s для работы с многострочными текстами |
|||
17
prorokk
13.07.11
✎
15:55
|
Делаю инфу в базу 1с-ки (описания и картинки)
наш Артикул это их код по нему и ищем... (15) СПАСИБО!!!! Получилось) |
|||
18
kittystark
13.07.11
✎
15:57
|
как вариант:
<dd>((?:.|\r\n)+)(?!</dd>) |
|||
19
prorokk
13.07.11
✎
16:06
|
(18) И тебе спасибо тоже работает) Всем спасибо!
|
|||
20
prorokk
13.07.11
✎
16:08
|
(18) твой вариант получает только первую строчку(
|
|||
21
kittystark
13.07.11
✎
16:24
|
(20) у меня в RegExp (VBScript/JScript) нормально все находится, проверял на твоем же тексте, может у регекспа надо флаги multiline и global проставить ? + пробежаться по коллекции matches
или попробуй после \r в (18) поставить вопрос: <dd>((?:.|\r?\n)+)(?!</dd>) - так будет корректнее работать, должно не только в "виндовых" текстах с переводом строки CR+LF (chr(13)chr(10)), но и в "линуховых" текстах, где перевод строки только один байт аж самому интересно... |
|||
22
prorokk
13.07.11
✎
17:54
|
(21) Флаги стоят)
<dd>((?:.|\r?\n)+)(?!</dd>) Выбирает весь текст в одну строку т.е. не 12 совпадений а 1 |
|||
23
prorokk
13.07.11
✎
17:59
|
Совет в (15) "<dd>(?:[\s\S]*?)</dd>" Работает...
Находит 12 совпадений Единственное значение совпадений содержит теги <dd>и</dd> А можно их убрать? |
|||
24
prorokk
13.07.11
✎
18:00
|
(23) <dd>([\s\S]*?)</dd> вот так) то что нужно:)
|
|||
25
prorokk
13.07.11
✎
18:01
|
Всем Респект!)
|
|||
26
prorokk
13.07.11
✎
18:01
|
(14) а что ты имел ввиду про скачать с другого сайта?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |