Имя: Пароль:
1C
IT-новости
Помогите с шаблоном регулярного выражения
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) а что ты имел ввиду про скачать с другого сайта?