Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Извлечь информацию из SPAN-тэга
 
 автор: narniabus   (07.06.2007 в 12:39)   письмо автору
 
 

есть участок кода на странице:


<tr valign="top">
<td><img height="1" width="10" src="/img/sys/dot.gif"></td><td align="right">
<div class="bt">
<small><sup><b>3</b></sup></small>
            &nbsp;
          </div>
</td><td>
<div class="bt">
<a name="ge1_3"></a><span class="lsu">&#954;&#945;&#953;&#768; &#949;&#953;&#787;
&#771;&#960;&#949;&#957; &#959;&#788; 
&#952;&#949;&#972;&#962; &#947;&#949;&#957;
&#951;&#952;&#942;&#964;&#969; &#966;&#969;
&#771;&#962; &#954;&#945;&#953;&#768; 
&#949;&#787;&#947;&#941;&#957;&#949;&#964;
&#959; &#966;&#969;&#771;&#962;
</span>
</div>
</td><td><img height="1" width="10" src="/
img/sys/dot.gif"></td><td 
bgcolor="#7F7F7F"><img height="1" width="1" 
src="/img/sys/dot.gif"></td><td><img 
height="1" width="10" src="/img/sys/dot.
gif"></td><td>
<div class="pm">
<a href="/bibletext?txt=ps+32:
6&cont=sep_gr" target="_blank">Пс 32:6</a>
<br>
<a href="/bibletext?txt=ps+32:9&cont=sep_gr" target="_blank">Пс 32:9</a>
<br>
</div>
</td>
</tr>


нужно при помощи

preg_math_all()

вытащить массив с выделенными участками (первый элемент массива "номер", второй элемент массива "строка"),

вся фишка в том, что это нужно мне для того, чтобы перекачать данные с друго сайта а их там больше 1 600 000 поэтому без рег. не справиться..

пожалуйста помогите ничего не получается.

пробовал так


$pattern = "#<SMALL><SUP><B>([^\s]+)</B></SUP></SMALL>#i";
preg_match_all($pattern,$content,$books, PREG_SET_ORDER);


номер выводится в массив

а строка:


$pattern2 = "#<SPAN\s[a-z]+\"lsu\"([^>]+)</SPAN>#i";
preg_match_all($pattern2,$content,$books, PREG_SET_ORDER);


нивкакую.

в массив выводит:
<span class='lsu'>
        </span>

   
 
 автор: Loki   (07.06.2007 в 12:53)   письмо автору
 
   для: narniabus   (07.06.2007 в 12:39)
 


<SPAN class=\"lsu\">([^>]+)</SPAN>

   
 
 автор: narniabus   (07.06.2007 в 19:07)   письмо автору
 
   для: Loki   (07.06.2007 в 12:53)
 

Loki спасибо за ответ.

проверил, ничего всё таже реакция, этот вариант я уже пробовал нулевая реакция, т.е.

если использовать


$pattern2 = "#<SPAN class=\"lsu\">([^>]+)</SPAN>#i";
preg_match_all($pattern2,$content,$literal,PREG_SET_ORDER);

foreach ($literal as $item) {
  echo "<tr><td>".$item[1]."</td>";
}


результат обработки:


<tr><td></td>
<tr><td></td>
и т.д.


либо пишет вот что:


Notice: Undefined offset: 1 in z:\home\greek\www\index.php on line 44


Я старался сделать одно регулярное выражение для того чтобы распарсить код на 2 части (индекс, и строка), но т.к. в рег. выражениях не профи, никак не получается сделать нужную последовательсть.

Подскажи если есть мысли как можно объединить это всё в один preg_match()

чтобы мой код:


$pattern = "#регулярное_вырежение#i";
preg_match_all($pattern,$content,$books, PREG_SET_ORDER);

foreach ($books as $part) {
?>
<tr>
        <td><?=$part[1]?></td>  <!-- индекс, между тегами <small><sup><b>ИНДЕКС</b></sup></small> -->
        <td><?=$part[2]?></td> <!-- строка 
между тегами--><span class="lsu">&#954;
&#945;&#953;&#768; &#949;&#953;&#787;&#771;
&#960;&#949;&#957; &#959;&#788; &#952;
&#949;&#972;&#962; &#947;&#949;&#957;&#951;
&#952;&#942;&#964;&#969; &#966;&#969;&#771;
&#962; &#954;&#945;&#953;&#768; &#949;
&#787;&#947;&#941;&#957;&#949;&#964;&#959; 
&#966;&#969;&#771;&#962;</span>
<? 
}


работал таким образом:


<tr><td>3</td>
       <td>&#954;&#945;&#953;&#768; &#949;
&#953;&#787;&#771;&#960;&#949;&#957; &#959;
&#788; &#952;&#949;&#972;&#962; &#947;
&#949;&#957;&#951;&#952;&#942;&#964;&#969; 
&#966;&#969;&#771;&#962; &#954;&#945;&#953;
&#768; &#949;&#787;&#947;&#941;&#957;&#949;
&#964;&#959; &#966;&#969;&#771;&#962;</td>
<tr><td>4</td>
       <td>&#949;&#787;&#947;&#941;&#957;
&#949;&#964;&#959; &#966;&#969;&#771;&#962;
&#954;&#945;&#953;&#768; &#949;&#953;&#787;
&#771;&#960;&#949;&#957; &#959;&#788; </td>
<tr><td>5</td>
       <td>&#949;&#957;&#949;&#964;&#959; 
&#966;&#969;&#771;&#962; &#954;&#945;&#953;
&#768; &#949;&#957;&#951;&#954;&#945;&#953;
&#768; </td>
и т.д.

В переменной $content содержится следующий код:

<tr valign="top">
<td><img height="1" width="10" src="/img/sys/dot.gif"></td><td align="right">
<div class="bt">
<small><sup><b>2</b></sup></small>
            &nbsp;
          </div>
</td><td>
<div class="bt">
<a name="ge1_2"></a><span class="lsu">&#951;&#788; &#948;&#949;&#768; 
&#947;&#951;&#771; &#951;&#787;&#771;&#957; 
&#945;&#787;&#972;&#961;&#945;&#964;&#959;
&#962; &#954;&#945;&#953;&#768; &#945;
&#787;&#954;&#945;&#964;&#945;&#963;&#954;
&#949;&#973;&#945;&#963;&#964;&#959;&#962; 
&#954;&#945;&#953;&#768; &#963;&#954;&#972;
&#964;&#959;&#962; &#949;&#787;&#960;&#940;
&#957;&#969; &#964;&#951;&#771;&#962; 
&#945;&#787;&#946;&#973;&#963;&#963;&#959;
&#965; &#954;&#945;&#953;&#768; &#960;
&#957;&#949;&#965;&#771;&#956;&#945; &#952;
&#949;&#959;&#965;&#771; &#949;&#787;&#960;
&#949;&#966;&#941;&#961;&#949;&#964;&#959; 
&#949;&#787;&#960;&#940;&#957;&#969; &#964;
&#959;&#965;&#771; &#965;&#788;&#833;&#948;
&#945;&#964;&#959;&#962;</span>
</div>
</td><td><img height="1" width="10" src="/
img/sys/dot.gif"></td><td 
bgcolor="#7F7F7F"><img height="1" width="1" 
src="/img/sys/dot.gif"></td><td><img 
height="1" width="10" src="/img/sys/dot.
gif"></td><td>
<div class="pm">
<a href="/bibletext?txt=jer+4:
23&cont=sep_gr" target="_blank">Иер 4:23</
a>
<br>
<a href="/bibletext?txt=ps+103:
30&cont=sep_gr" target="_blank">Пс 103:30</
a>
<br>
</div>
</td>
</tr>

Да и ещё один момент, когда пытался сделать рег. выражение в скобках, ну чтобы дать понять компилятору последовательность которая должна соответствовать строке, то возникают пробоемы, т.к. строка в UTF-8 греческом шрифте, а в рег. выражениях только русские и латинские буквы... вот такая вот проблема.

Буду благодарен, если кто нибудь поможет...
Мои услуги верстальщика и дизайнера всегда к Вашим услугам... ;))

   
 
 автор: mr Bin   (07.06.2007 в 19:49)   письмо автору
 
   для: narniabus   (07.06.2007 в 19:07)
 

На вашем примере много переходов со строки на строку, сними бороться не умею..
Но елси бы текст был сплошной, то так:

<?php
$content 
'<small><sup><b>3</b></sup></small>&nbsp;</div></td><td><div class="bt"><span class="lsu">Ваш текст</span>'
$pattern "|<small><sup><b>([^<]+)</b></sup></small>&nbsp;</div></td><td><div class=\"bt\"><span class=\"lsu\">([^<]+)</span>[\s]*|is";
preg_match_all($pattern$content$out); 
for (
$i 0$i count($out[0]); $i++){ echo ''.$out[1][$i].'&nbsp;&nbsp;'.$out[2][$i].'<br>'; }
?>

   
 
 автор: narniabus   (08.06.2007 в 00:18)   письмо автору
 
   для: mr Bin   (07.06.2007 в 19:49)
 

Спасибо огромное mrBin!

Ваш вариант сначала не сработал, вы забыли учесть тег


<a name="get1_2"></a>


Я оптимизировал скрипт и решил проблему с переносами, просто получая данные через функицю file() я исключил из переменной все символы перехода строки и лишние пробелы, т.о.:


<?
$filedata 
file("data.html");
$content "";

foreach (
$filedata as $filestring) {
        
$content .= nl2br(ltrim(trim($filestring)));
}

$content nl2br($content);

$pattern "|<small><sup><b>([^<]+)</b></sup></small>&nbsp;</div></td><td><div class=\"bt\"><a name=\"[a-z]+[0-9]+_[0-9]+\"></a><span class=\"lsu\">([^<]+)</span>[\s]*|is";

preg_match_all($pattern$content$out);

for (
$i 0$i count($out[0]); $i++) {
        echo 
'<tr><td valign=top width=30 align=center><b>'.$out[1][$i].'</b><td style="font-size:11px;"><span class="lsu">'.$out[2][$i].'</span></td></tr>';
}
?>


Теперь результат именно такой как нужно..

Спасибо большое за помощь. Если что то Вам будет нужно, обращайтесь с радостью помогу Вам.

Мой контактный емейл: http://www.free-lance.ru/users/2omega/

   
 
 автор: mr Bin   (08.06.2007 в 00:30)   письмо автору
 
   для: narniabus   (08.06.2007 в 00:18)
 

Незачто :) Рад что помог.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования