Да помислим логично

strasburg

Registered
Имам една лееко отвратителна спънка. С file_get_contents взимам съдържание от определен сайт. И да кажем взимам следният ред от таблица:


HTML:
<td><span><span style="display: inline">222</span><span style="display:none">149</span>.<span style="display: inline">124</span><span style="display:none">50</span><div style="display:none">121</div>.<span>217</span><div style="display:none">96</div><span class="" style="">.</span><span class="117">170</span></span></td>

В този ред се изписва един IP адрес, но пичовете доста стабилно са се защитили от тарикатчета като мен както виждате... Всяка цифричка оградили с различни безсмислени span-ове и div-ове, та да ме усложнят максимално...

Добре до тук със str_replace изчистих кода до някъде, но сега остава последният и най-гаден span да се премахне, но не знам как поради простата причина, че на всеки IP адрес този span е с различна стойност.

В нашия случай става дума за:

HTML:
<span class="117">170</span>

Този клас 117 е динамичен и както по-горе споменах не играе никаква роля освен да ми пречи, и понеже всеки път там е намърдана различна цифричка не знам как да го разкарам със str_replace и накрая да получа едно чисто IP:

222.124.217.170

Надявам се да има по креативно мислещи от мен, които да помогнат. :D
Ако нещо не сте разбрали, кажете да обясня по-просто.
 
Може би по-лесно ще е ако задам така въпроса:

Как от този бълвоч чисто и просто да изкарам само IP адреса, който се съдържа в него, а именно 222.124.217.170

HTML:
<td><span><span style="display: inline">222</span><span style="display:none">149</span>.<span style="display: inline">124</span><span style="display:none">50</span><div style="display:none">121</div>.<span>217</span><div style="display:none">96</div><span class="" style="">.</span><span class="117">170</span></span></td>
 
PHP:
<?php
$get='<td><span><span style="display: inline">222</span><span style="display:none">149</span>.<span style="display: inline">124</span><span style="display:none">50</span><div style="display:none">121</div>.<span>217</span><div style="display:none">96</div><span class="" style="">.</span><span class="117">170</span></span></td>
';

$get=explode('.', $get);
$gg=explode ("</span>", $get[0]);
$get_first=preg_replace("/[^0-9]/", '', $gg[0]);
echo $get_first;

echo ".";

$gg1=explode ("</span>", $get[1]);
$get_second=preg_replace("/[^0-9]/", '', $gg1[0]);
echo $get_second;

echo ".";

$gg2=explode ("</span>", $get[2]);
$get_third=preg_replace("/[^0-9]/", '', $gg2[0]);
echo $get_third;

echo ".";

$gg3=explode ("</span>", $get[3]);
$gg3=explode (">", $gg3[1]);
$get_four=$gg3[1];
echo $get_four;

?>
 
Ето ти го и по-подредено:

Писах ново мнения, за да не се обърка просто с горното, така по-подредено.

PHP:
<?php
$get='<td><span><span style="display: inline">222</span><span style="display:none">149</span>.<span style="display: inline">124</span><span style="display:none">50</span><div style="display:none">121</div>.<span>217</span><div style="display:none">96</div><span class="" style="">.</span><span class="117">170</span></span></td>
';

$get=explode('.', $get);
$gg=explode ("</span>", $get[0]);
$get_first=preg_replace("/[^0-9]/", '', $gg[0]);
$gg1=explode ("</span>", $get[1]);
$get_second=preg_replace("/[^0-9]/", '', $gg1[0]);
$gg2=explode ("</span>", $get[2]);
$get_third=preg_replace("/[^0-9]/", '', $gg2[0]);
$gg3=explode ("</span>", $get[3]);
$gg3=explode (">", $gg3[1]);
$get_four=$gg3[1];
$theip=$get_first.".".$get_second.".".$get_third.".".$get_four;

echo $theip;
?>
 
Добре, работи, но както казах за всеки IP адрес бълвоча е различен. Примерно сега ако сменя стойноста на $get с това:

HTML:
<td><span>61<div style="display:none">140</div><span class="" style="">.</span><span style="display: inline">167</span><span style="display:none">212</span><div style="display:none">142</div>.<span>49</span><span style="display:none">172</span><span></span><span class="" style="">.</span><span style="display: inline">188</span></span></td>

не бачка коректно... :shock:

Излиза: 61140..49.188
А трябва да е: 61.167.49.188
 
PHP:
<?php

$string =<<< POD
	<td><span><span style="display: inline">222</span><span style="display:none">149</span>.<span style="display: inline">124</span><span style="display:none">50</span><div style="display:none">121</div>.<span>217</span><div style="display:none">96</div><span class="" style="">.</span><span class="117">170</span></span></td>
POD;

preg_match_all("#<.*inline.*>(\d+)\<\/.*?>#si", $string, $matches);

echo $matches[0][0];

Ами това ?
 
Промених го, просто вместо $matches[0][0] го бях оставил на $matches[0].


Еди, не разбрах какво да му гледам на кода ?

http://79.132.1.41/preg_match2.php
 
При теб се появяват и таговете покрай цифрите. А при мен само изчистените цифри. Става дума в source кода.

До автора:
Но щом и таговете покрай цифрите се сменят и се добавят допълнително други цифри покрай тях, то тогава това граничи с невъзможност да вземеш IP - то.
 
Пробвай с този код и кажи дали работи
Код:
<?php
$t='<td><span><span style="display: inline">222</span><span style="display:none">149</span>.<span style="display: inline">124</span><span style="display:none">50</span><div style="display:none">121</div>.<span>217</span><div style="display:none">96</div><span class="" style="">.</span><span class="117">170</span></span></td>';
$t0=explode('style="display:none">',$t);
foreach($t0 as $tt) {
	$t1=explode("<",$tt);
	$t=str_replace('style="display:none">'.$t1[0].'<',"",$t);
}
$text="";
$t0=explode(">",$t);
foreach($t0 as $tt) {
	$t1=explode("<",$tt);
	$text.=$t1[0];
}
echo $text;
?>
 
На peter_ew наистина работи, само трябва да проверя дали наистина всички IP-та ги изписва правилно.
 
Ами автора да даде няколко различни варианта, които могат да са факт, за да може да му се даде универсално решение.
А ти видя ли линка, който дадох, за да се убедиш, че моя вариант е най-кратък и все пак работи ?
 
Да наистина, на peter_ew работи отлично. Страшен гений е, никога не бих се сетил за подобно нещо... :D

Огромни благодарности на всички включили се в темата, задължен съм ви. :)

Ей преборихме ги тия, с техният опит да се спасят от мен... :D
 

Горе