|
|
|
| ЗДравствуйте. Подскажите, где я ошибся? Задачи вытащить из таблицы данные, но что-то выводит таблицу в итоге а не ее элементы
preg_match('|<table class="wide">(.*)</table>|smi', $content, $arr);
$tb=$arr[1];
preg_match_all('|<tr>(.*)</tr>|smi', $tb, $ari);
preg_match_all('|<td>(.*)</td>|smi', $ari[0][0], $aru);
echo '<hr><br>';
print_r($ari);
echo $aru[0];
|
сама таблица вида
<table class="wide">
<tr>
<th valign="top">Индекс</th>
<th width="35%" valign="top">Название вещества</th>
<th width="35%" valign="top">Английское название<br />
<small>ссылка</small></th>
<th width="15%" valign="top">Цветок</th>
<th valign="top">Примечание</th>
</tr>
<tr>
<td>E100</td>
<td><i>Куркумины</i>:<br />
(i) <a href="%83%D0%BC%D0%B8%D0%BD" title="Куркумин">Куркумин</a><br />
(ii) <a href="%D0%A2%D1%83%D1%80%D0%BC%D0%B5%D1%80%D0%B8%D0%BA" title="Турмерик">Турмерик</a></td>
<td><i>Curcumins</i>:<br />
(i) <a href="//Curcumin" class="extiw" title="en:Curcumin">Curcumin</a><br />
(ii) <a href="//Turmeric" class="extiw" title="en:Turmeric">Turmeric</a></td>
<td>Жёлто-оранжевый</td>
<td> </td>
</tr>
|
| |
|
|
|
|
|
|
|
для: BMW
(15.02.2012 в 09:57)
| | 1. У меня ваш пример вообще ничего не выводит.
2. А что значит m в |smi ?
3. Вы используете "жадный" поиск (.*) а нужно (.*?) | |
|
|
|
|
|
|
|
для: BMW
(15.02.2012 в 09:57)
| | Вот так:
preg_match('|<table class="wide">(.*?)</table>|si', $table, $arr);
preg_match_all('|<td>(.*?)</td>|si', $arr[1], $aru);
print_r($aru);
| выбираются все внутренности TD.
Если нужно по строкам, то нужно в цикле перебирать промежуточную выборку TR | |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2012 в 16:04)
| | спасибо! да отлично, а вот только как удалить все остальные тэги и можно ли выбирать без тегов обрамления <td>?
preg_match('|<table class="wide">(.*?)</table>|si', $content, $arr);
preg_match_all('|<tr>(.*?)</tr>|si', $arr[1], $aru);
foreach($aru[1] as $s)
{
//print_r($s);
preg_match_all('|<td>(.*?)</td>|si', $s, $ar);
print_r($ar);
}
|
| |
|
|
|
|
|
|
|
для: BMW
(15.02.2012 в 18:11)
| | > можно ли выбирать без тегов обрамления <td>
Так в массиве $ar[1] все элементы без тегов.
> а вот только как удалить все остальные тэги
$ar[1] = preg_replace("#</?[^>]+>#s","",$ar[1]);
|
| |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2012 в 19:07)
| | точно, прошу прощения за вопросы, но еще один, а если в тэге td <td rowspan="3"> парсер их не выбирает это надо <td (*?)> прописать? а как число вычленить? | |
|
|
|
|
|
|
|
для: BMW
(15.02.2012 в 19:16)
| | не <td (*?)>, а <td.*?> либо <td[^>]*> | |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2012 в 19:20)
| | а что за констукция Либо 0, либо сколько угодно и знак вопроса- это 0 или 1...
Первый раз вижу, как она работает? :) | |
|
|
|
|
|
|
|
для: ladan
(16.02.2012 в 00:51)
| | Это "не жадный" поиск. Если дана строка:
<teg>text</teg>text<teg>text</teg>text<teg>text</teg>
поиск по маске <teg>.*</teg> найдет <teg>text</teg>text<teg>text</teg>text<teg>text</teg>, т.е. до последнего совпадения (жадный)
а по маске <teg>.*?</teg> найдет <teg>text</teg>, т.е. до первого (не жадный) | |
|
|
|
|
|
|
|
для: Sfinks
(16.02.2012 в 03:14)
| | спасибо, вот в итоге получилось как
$norm_td=5;
preg_match('|<table class="wide">(.*?)<td colspan="6"><b> Обозначения</b></td>|si', $content, $arr);
preg_match_all('|<tr.*?>(.*?)</tr>|si', $arr[1], $aru);
foreach($aru[1] as $k => $s)
{
//print_r($s);
preg_match_all('|rowspan="(.*?)"|si', $s, $num);
preg_match_all('|<td.*?>(.*?)</td>|si', $s, $ar);
$ar[1] = preg_replace("#</?[^>]+>#s","",$ar[1]);
foreach($ar[0] as $ki => $si)
{
if(($num[1][0]) and strstr($si,"rowspan="))
{
$key=$ki;
$zamena=$ar[1][$key];
}
}
if(count($ar[1])!=$norm_td)
foreach($ar[1] as $ku => $su)
{
if($ku==$key){$ar[1][$key]=$zamena;$op=1;}
if($op)$ar[1][$ku+1]=$su;
}
$op=0;
print_r($ar[1]);
}
| все работает как надо) | |
|
|
|
|
|
|
|
для: Sfinks
(16.02.2012 в 03:14)
| | спасибо, все понятно :) | |
|
|
|