[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помощь с регуляркой
OneFinal
дорогие сторожилы форума, помогите с регуляркой
нужно выдрать ИД и имя вещи
в формате

100001183 Меч отшельника




отсюда


<tr>
<td
class="td1"><div class="td-f"><img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_l01.png" alt="Меч отшельника" height="40" width="40"></div></td>
<td
class="td2"><div class="td-rp"><p><span><a href="javascript:show_3d(100001183,3);" style="color: rgb(255, 0, 0);">[Вид в 3D]</a> <a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td>
<td
class="td3"><div class="td-rp"><span>60</span></div></td>
<td
class="td4"><div class="td-rp"><span>176 - 216</span></div></td>
<td
class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
<td
class="td6"><div class="td-r"><span><b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b></span></div></td>
</tr>



вот тут

<a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td>


id=100001183

>Меч отшельника</a>




Спустя 32 минуты, 25 секунд (12.06.2012 - 19:26) Winston написал(а):
Свернутый текст
$txt = '<a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td& amp; gt;
<a href="http://aidb.ru/?aion=item_info&id=10" style="color: rgb(44, 143, 214);">Меч отшельника 2</a><br><em>no_name</em></span></p></div></td>
<a href="http://aidb.ru/?aion=item_info&id=100500" style="color: rgb(44, 143, 214);">Меч отшельника 3</a><br><em>no_name</em></span></p></div></td>'
;
preg_match_all('#id=(\d+)".*>(.*)</a>#U', $txt, $res);
echo '<pre>' . print_r($res, 1);

Оно?

Спустя 3 минуты, 3 секунды (12.06.2012 - 19:30) OneFinal написал(а):
не совсем нужно в формате

100001183 Меч отшельника 


а тут получается


Array
(
[
0] => Array
(
[
0] => id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника
[1] => id=10"
style="color: rgb(44, 143, 214);">Меч отшельника 2
[2] => id=100500" style="color: rgb(44, 143, 214);">Меч отшельника 3
)

[1] => Array
(
[0] => 100001183
[1] => 10
[2] => 100500
)

[2] => Array
(
[0] => Меч отшельника
[1] => Меч отшельника 2
[2] => Меч отшельника 3
)

)

Спустя 4 минуты, 36 секунд (12.06.2012 - 19:34) Winston написал(а):
Цитата (OneFinal @ 12.06.2012 - 19:30)
не совсем нужно в формате

А пошевелить мозгом и сделать самому? smile.gif Регулярку уже тебя написал.

Спустя 3 минуты, 23 секунды (12.06.2012 - 19:38) OneFinal написал(а):
я к такому тоже пришел, но не могу вот это убрать.

 style="color: rgb(44, 143, 214);">

Спустя 5 минут, 10 секунд (12.06.2012 - 19:43) Winston написал(а):
Цитата (OneFinal @ 12.06.2012 - 19:38)
я к такому тоже пришел, но не могу вот это убрать.

А ты не используй нулевой массив. Работай с массивами 1 и 2, можно цикл использовать, чтобы добиться нужного результата.

Спустя 1 час, 30 минут, 30 секунд (12.06.2012 - 21:13) OneFinal написал(а):
сделал, получилось:) теперь вопрос в другом
как все это дело занести в таблицу?


foreach ($arr[1] as $id)
{
foreach($arr[2] as $name){
$sql1 = mysql_query("INSERT INTO `test` (`id`,`name`) VALUES ('$id','$name')") or die(mysql_error());
}
}



так не получаеться, он берет первое ИД и с этим ИД добавляет все имена.

Спустя 12 часов, 21 минута, 51 секунда (13.06.2012 - 09:35) Winston написал(а):
$sql = array();
foreach(array_combine($res[1], $res[2]) as $key => $val)
$sql[] = '("' . (int)$key . '", "' . mysql_real_escape_string($val) . '")';
$sql1 = mysql_query("INSERT INTO `test` (`id`,`name`) VALUES " . implode(', ', $sql)) or die(mysql_error());

Получается...

Спустя 36 минут, 41 секунда (13.06.2012 - 10:12) killer8080 написал(а):
$t = ' 
<tr>
<td class="td1"><div class="td-f"><img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_l01.png" alt="Меч отшельника" height="40" width="40"></div></td>
<td class="td2"><div class="td-rp"><p><span><a href="javascript:show_3d(100001183,3);" style="color: rgb(255, 0, 0);">[Вид в 3D]</a> <a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td& gt;
<td class="td3"><div class="td-rp"><span>60</span></div></td>
<td class="td4"><div class="td-rp"><span>176 - 216</span></div></td>
<td class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
<td class="td6"><div class="td-r"><span><b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b></span></div></td>
</tr>
'
;
preg_match_all('#http\://aidb\.ru/\?aion\=item_info&id\=(\d+)[^>]*>(.*)</a>#i', $t, $m);
echo '<pre>'.print_r($m, 1).'</pre>';

Спустя 1 день, 7 часов, 21 минута, 10 секунд (14.06.2012 - 17:33) OneFinal написал(а):
получилось, считаю себя дибилом, уже 2 недели не могу нормально понять это все дело, и написать наконецто нормальную регулярку, нужно взять полностью все данные из этого.



<tr> 
<td
class="td1"><div class="td-f"><img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_l01.png" alt="Меч отшельника" height="40" width="40"></div></td>
<td
class="td2"><div class="td-rp"><p><span><a href="javascript:show_3d(100001183,3);" style="color: rgb(255, 0, 0);">[Вид в 3D]</a> <a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td& gt;
<td class="td3"><div class="td-rp"><span>60</span></div></td>
<td
class="td4"><div class="td-rp"><span>176 - 216</span></div></td>
<td
class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
<td
class="td6"><div class="td-r"><span><b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b></span></div></td>
</tr>


т.е ссылку на картинку
<img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_l01.png" alt="Меч отшельника" height="40" width="40">


потом ИД и Имя уже получил нужно получить ещё Лвл т.е отсюда

<td class="td3"><div class="td-rp"><span>60</span></div></td>

и атаку


<td class="td4"><div class="td-rp"><span>176 - 216</span></div></td> 

и вот эти данные

<td class="td5"><div class="td-rp"><span>- / - / -</span></div></td> 

подкиньте меня в правельном направлении

Спустя 1 час, 30 минут, 2 секунды (14.06.2012 - 19:03) OneFinal написал(а):
preg_match_all("#<div class=\"td-rp\"><span>([0-9]{1,2})</span></div></td>#","$string",$arr);


что бы получить лвл и атаку, теперь как его засунуть в глав регулярку ?
preg_match_all("#<div class=\"td-rp\"><span>([0-9]{1,2})</span></div></td>#i","$string",$level);
preg_match_all("#<div class=\"td-rp\"><span>(.*[1-9])</span></div></td>#i","$string",$attak);


и для картинок

$images = array();
preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $string, $media);
unset($string);
$string = preg_replace('/(img|src)("|\'|="|=\')(.*)/i', "$3", $media[0]);

foreach ($string as $url) {
$info = pathinfo($url);
if (isset($info['extension'])) {
if (($info['extension'] == 'jpg') ||
(
$info['extension'] == 'jpeg') ||
(
$info['extension'] == 'gif') ||
(
$info['extension'] == 'png'))
array_push($images, $url);
}
}

Спустя 59 минут, 14 секунд (14.06.2012 - 20:02) OneFinal написал(а):
up помогите, уже в ступоре...

Спустя 56 минут, 52 секунды (14.06.2012 - 20:59) walerus написал(а):
OneFinal прикрепи весь HTML код, желательно не портянкой, а файлом, а то потом окажется что еще что то мешает в коде и не парсится как нужно.

Спустя 15 часов, 32 минуты, 23 секунды (15.06.2012 - 12:31) OneFinal написал(а):
rghost.ru/38674345 вот тут сохраненная стр.

Спустя 1 час, 23 минуты, 23 секунды (15.06.2012 - 13:55) inpost написал(а):
OneFinal
Я не понимаю твоей проблемы, ты использовал регулярку и получил в итоге большой массив, в котором часть элементов верные тебе. Что мешает их и вывести через echo $matches[5][17] ? Всё ведь верно и работает! Собственно это и сказал выше Винстон, что указывай ключи верно и получишь то, что тебе надо.
И вообще, парсишь ты не то, что видят твои глаза, а HTML код, поэтому это нормально, что в массиве могут быть лишние элементы, которые просто вырезать надо из финального результата.

Спустя 47 минут, 16 секунд (15.06.2012 - 14:42) OneFinal написал(а):
эм... покажи пример, как скомбинировать все массивы пож smile.gif

Спустя 29 минут, 4 секунды (15.06.2012 - 15:11) inpost написал(а):
Какие все массивы? Я вижу поиск одного элемента, который находится в одном многомерном массиве.

Спустя 36 минут, 31 секунда (15.06.2012 - 15:48) OneFinal написал(а):
ну смотри, я делаю preg_match_all( ) на каждый элемент, получаю массу массивов, теперь как их соединить и потом занести в базу по своим колонкам?

Спустя 51 минута, 55 секунд (15.06.2012 - 16:40) killer8080 написал(а):
$t = ' 
<tr>
<td class="td1"><div class="td-f"><img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_e01.png" alt="Меч командира аканов-стражей" height="40" width="40"></div></td>
<td class="td2"><div class="td-rp"><p><span><a href="javascript:show_3d(100001237,3);" style="color: rgb(255, 0, 0);">[Вид в 3D]</a> <a href="http://aidb.ru/?aion=item_info&id=100001237" style="color: rgb(255, 128, 51);">Меч командира аканов-стражей</a><br><em>no_name</em></span></p></div>< /td>
<td class="td3"><div class="td-rp"><span>60</span></div></td>
<td class="td4"><div class="td-rp"><span>192 - 235</span></div></td>
<td class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
<td class="td6"><div class="td-r"><span><b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b></span></div></td>
</tr>
'
;

preg_match_all(
'#<tr>.*'.
'<td class="td1">.*<img.+src="(.*)".*>.*</td>.*'.
'<td class="td3">.*<span>(.*)</span>.*</td>.*'.
'<td class="td4">.*<span>(.*)</span>.*</td>.*'.
'<td class="td5">.*<span>(.*)</span>.*</td>.*'.
'</tr>#isUu',

$t,
$m
);
echo '<pre>'.htmlspecialchars(print_r($m, 1)).'</pre>';

Спустя 3 часа, 57 минут, 53 секунды (15.06.2012 - 20:37) OneFinal написал(а):
все получилось но тут проблема
функц. array_combine принимает только 2 массива, как обработать 4?

$sql = array();
foreach(array_combine($arr[2],$arr[3],$arr[4],$arr[5]) as $key => $val)
$sql[] = '("' . (int)$key . '", "' . mysql_real_escape_string($val) . '")';
$sql1 = mysql_query("INSERT INTO `test` (`img`,`id`,`name`,`attack`) VALUES " . implode(`,`,`,`,$sql)) or die(mysql_error());

Спустя 2 часа, 20 минут, 54 секунды (15.06.2012 - 22:58) Winston написал(а):
foreach(array(array_combine($arr[2],$arr[3]), array_combine($arr[4],$arr[5])) as $key => $val)

?

Спустя 9 минут, 24 секунды (15.06.2012 - 23:08) OneFinal написал(а):
Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in 

Warning: implode() expects at most 2 parameters, 3 given in

Спустя 1 час, 16 минут, 52 секунды (16.06.2012 - 00:25) OneFinal написал(а):
вопрос не совсем по теме, вот скрипт отсылает пост запрос к серверу и получает html стр. потом я прогоняю её через регуляр но получаю пустой массив, почему ?

$url = 'http://aidb.ru/?aion=items';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'i_quality=1&i_version=5&i_param=0&i_param_charge=0&i_spec_sell=0&class=1&min_lvl=50&max_lvl=55&doItem=1');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($curl);
echo $html;
preg_match_all('#<td class="td1">.*<img.+src="(.*)".*>.*</td>.*'.
'id=(\d+)".*>(.*)</a>.*'.
'<td class="td3">.*<span>(.*)</span>.*'.
'<div class=\"td-rp\"><span>(.*)</span></div>.*</td>#isUu',$html,
$arr
);

print_r ($arr);

Спустя 25 минут, 18 секунд (16.06.2012 - 00:50) OneFinal написал(а):
Все зароботало с флагами
#Us

Спустя 9 часов, 20 минут, 40 секунд (16.06.2012 - 10:11) OneFinal написал(а):
up люди помогите домучать

Спустя 1 день, 23 часа, 21 минута, 56 секунд (18.06.2012 - 09:32) killer8080 написал(а):
Цитата (OneFinal @ 15.06.2012 - 20:37)
функц. array_combine принимает только 2 массива, как обработать 4?

А зачем тебе вообще понадобился array_combine()?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.