|   |   | 
| 
 | Помогите с шаблоном регулярного выражения | ☑ | ||
|---|---|---|---|---|
| 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) а что ты имел ввиду про скачать с другого сайта?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |