|
|
|
| есть участок кода на странице:
<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>
</div>
</td><td>
<div class="bt">
<a name="ge1_3"></a><span class="lsu">καὶ εἰ
̃πεν ὁ
θεός γεν
ηθήτω φω
̃ς καὶ
ἐγένετ
ο φω̃ς</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>
|
| |
|
|
|
|
|
|
|
для: narniabus
(07.06.2007 в 12:39)
| |
<SPAN class=\"lsu\">([^>]+)</SPAN>
|
| |
|
|
|
|
|
|
|
для: 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">κ
αὶ εἰ̃
πεν ὁ θ
εός γενη
θήτω φω̃
ς καὶ ε
̓γένετο
φω̃ς</span>
<?
}
|
работал таким образом:
<tr><td>3</td>
<td>καὶ ε
ἰ̃πεν ο
̔ θεός γ
ενηθήτω
φω̃ς και
̀ ἐγένε
το φω̃ς</td>
<tr><td>4</td>
<td>ἐγέν
ετο φω̃ς
καὶ εἰ
̃πεν ὁ </td>
<tr><td>5</td>
<td>ενετο
φω̃ς και
̀ ενηκαι
̀ </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>
</div>
</td><td>
<div class="bt">
<a name="ge1_2"></a><span class="lsu">ἡ δὲ
γη̃ ἠ̃ν
ἀόρατο
ς καὶ α
̓κατασκ
εύαστος
καὶ σκό
τος ἐπά
νω τη̃ς
ἀβύσσο
υ καὶ π
νευ̃μα θ
εου̃ ἐπ
εφέρετο
ἐπάνω τ
ου̃ ὕδ
ατος</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 греческом шрифте, а в рег. выражениях только русские и латинские буквы... вот такая вот проблема.
Буду благодарен, если кто нибудь поможет...
Мои услуги верстальщика и дизайнера всегда к Вашим услугам... ;)) | |
|
|
|
|
|
|
|
для: narniabus
(07.06.2007 в 19:07)
| | На вашем примере много переходов со строки на строку, сними бороться не умею..
Но елси бы текст был сплошной, то так:
<?php
$content = '<small><sup><b>3</b></sup></small> </div></td><td><div class="bt"><span class="lsu">Ваш текст</span>';
$pattern = "|<small><sup><b>([^<]+)</b></sup></small> </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].' '.$out[2][$i].'<br>'; }
?>
|
| |
|
|
|
|
|
|
|
для: mr Bin
(07.06.2007 в 19:49)
| | Спасибо огромное mrBin!
Ваш вариант сначала не сработал, вы забыли учесть тег
Я оптимизировал скрипт и решил проблему с переносами, просто получая данные через функицю 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> </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/ | |
|
|
|
|
|
|
|
для: narniabus
(08.06.2007 в 00:18)
| | Незачто :) Рад что помог. | |
|
|
|