Просмотр полной версии : Правильно ли я выбрал шаблон?
Фрагмент кода:
<td class="content">
<!-- INDEX1 START -->
<h1>Цементно-песчаная черепица</h1>
Цементно-песчаная черепица
<p>При строительстве коттеджей и......
<!-- INDEX1 END -->
</td>
<td id="right">
Пробовал шаблон:
<td class="content">(.+)</td>\s*<td id="right">
Тексты не нашлись.
В чем может быть дело?
Если в этом проекте выбор шаблона поставить автоматически, то прога выдергивает текст из тегов <li>
Расширенный фрагмент кода:
<li><a href="/articles/14/430/">Грузоперевозки в контейнерах</a></li>
<li><a href="/articles/5/429/">Механизм управления рольставнями</a></li>
<li><a href="/articles/11/428/">Азбука ремонта: покраска – дело тонкое...</a></li>
<li><a href="/articles/16/427/">Недвижимость за границей: что, как, почём</a></li>
<li><a href="/articles/3/426/">История производства сэндвич панелей</a></li>
</ul>
</td>
<td class="content">
<!-- INDEX1 START -->
<h1>Украшение фасада - сайдинг</h1>
<p>Сайдинг - это пластиковые стеновые панели (ПВХ) для наружной отделки.......</p>
<!-- INDEX1 END -->
</td>
<td id="right">
Результат получается буквально такой:
*Грузоперевозки в контейнерах
*Механизм управления рольставнями
*Азбука ремонта: покраска – дело тонкое...
*Недвижимость за границей: что, как, почём
*История производства сэндвич панелей
Нормальный текст.
Следовательно нужно сделать так, чтобы текст не брался из тегов <li>, либо во вкладке "операции" как-то удалить во всех статьях лишнии строчки.
Как это сделать я пока не понимаю.:(
Попробовал с другим сайтом.
Указал шаблон.
Тексты не нашлись.
Глюк в проге что ли?
Фрагмент кода:
<td class="content">
<!-- INDEX1 START -->
<h1>Цементно-песчаная черепица</h1>
Цементно-песчаная черепица
<p>При строительстве коттеджей и......
<!-- INDEX1 END -->
</td>
<td id="right">
Пробовал шаблон:
<td class="content">(.+)</td>\s*<td id="right">
Тексты не нашлись.
В чем может быть дело?
Дело может быть в том, что может быть в исходном тексте не по одному пробелу, а по несколько. Например в теге <td class="content"> между td и class два или более пробелов. В таких случаях можете использовать шаблон \s+, обозначающий "один или более пробелов". В результате вы получите вот такой шаблон:
<td\s+class="content">(.+)</td>\s*<td\s+id="right">
Кроме того, желательно использование модификаторов.
(?i) - включает режим игнорирования строчных-заглавных букв
(?-i) - выключает его
(?g) - включает "жадный режим"
(?-g) - выключает его.
Приведу пример жадных захватов. Пусть у нас есть вот такой текст:
<table>
<tr><td class="td">нужный текст</td></tr>
<tr><td class="td">ненужный текст</td></tr>
</table>
Если вы укажете шаблон
<td class="td">(.*)</td>,
то в результат попадут оба текст - и нужный, и ненужный. Если же перед этим шаблоном указать модификатор отключения жадности (?-g), то в результат попадет только нужный текст. Это происходит из-за того, что в "жадном" варианте выражение выгребает весь текст до последнего </td>, тогда как в нежадном варианте - только до первого.
И еще: старайтесь указывать модификатор (?i), так как в исходном тексте могут использоваться большие буквы, которые без этого модификатора не будут найдены.
Кстати, модификаторы можно группировать. Например вот такой модификатор: (?i-g) укажет программе игнорировать регистр букв и использовать нежадный подход к выборке данных.
И еще, старайтесь использовать как можно более близкие (и уникальные) теги. В вашем случае было бы более правильно использовать вот такой шаблон:
<!-- INDEX1 START -->(.*)<!-- INDEX1 END -->Конечно же, такой шаблон подойдет в том случае, когда такая пара встречается в тексте только один раз. И опять же, желательно смотреть на количество пробелов в исходном тексте, чтобы не ломать голову над тем, почему регулярное выражение не работает.
Если в этом проекте выбор шаблона поставить автоматически, то прога выдергивает текст из тегов <li>
Расширенный фрагмент кода:
Результат получается буквально такой:
*Грузоперевозки в контейнерах
*Механизм управления рольставнями
*Азбука ремонта: покраска – дело тонкое...
*Недвижимость за границей: что, как, почём
*История производства сэндвич панелей
Нормальный текст.
Следовательно нужно сделать так, чтобы текст не брался из тегов <li>, либо во вкладке "операции" как-то удалить во всех статьях лишнии строчки.
Как это сделать я пока не понимаю.:(
У меня есть соображения, как пропускать менюшки, сделанные из тегов <li>, так что в будущей версии я все сделаю.
Спасибо за детальное разъяснение. Попробую.
\s+ и \s* - есть разница?
С модификатором вид шаблона будет такой:
(?-g)<td class="td">(.*)</td>
Правильно?
В окне указания шаблона нужно ставить галочку "Шаблон является регулярным выражением"?
Ничего не получается!!!:confused:
Испробованные шаблоны:
<td\s+class="content">(.+)</td>\s*<td\s+id="right">
<!-- INDEX1 START -->(.*)<!-- INDEX1 END -->
(?i)<!--\s*INDEX1\s*START\s*-->(.*)<!--\s*INDEX1\s*END\s*-->
Сайт: http://www.kroi.ru
Страницы типа: http://www.kroi.ru/articles/1/33/
\s+ и \s* - есть разница?
С модификатором вид шаблона будет такой:
(?-g)<td class="td">(.*)</td>
Правильно?
Да, все верно.
По поводу плюсов и звездочек:
плюс обозначает "один или более символов"
звездочка - "ноль или более символов"
В окне указания шаблона нужно ставить галочку "Шаблон является регулярным выражением"?
Да, обязательно!
С галочкой тоже ничего не получается!:confused:
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd. Перевод: zCarot