Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/37: Рейтинг темы: голосов - 37, средняя оценка - 4.76
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160

Поиск информации по странице

12.09.2010, 23:52. Показов 7478. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, как реализовать поиск нужной мне информации на сайте и занесение в базу данных

Код получаю $cod = file_get_contents('http://site.com/pages/hands');
HTML5
1
2
3
4
5
<td class="tip"><img class="itemicon" src="http://site.com/sites/images/icons/item/hands.png">
<div class="itemname">hands</div>
<div class="itemtype">Medium</div>
<div class="itemdata">487</div>
</td>
Как мне по фиолетовым данным найти красные данные, используя регулярные выражения?
Или подскажите документацию по регулярным выражениям на русском языке.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2010, 23:52
Ответы с готовыми решениями:

Ввод информации в структуру и поиск элемента по информации, находящейся в этом же элементе
В сервис-центре хранятся квитанции о сданной в ремонт аппаратуре. Каждая квитанция содержит следующую информацию: наименование группы...

Запись в текстовый файл информации о студентах, поиск информации, сортировка
Здравствуйте помогите пожалуйста:( 3.1 Для записи в текстовый файл информации о студентах Вашей группы создать КФ WRITE_FD.BAT со...

получения информации о странице
возник такой вопрос, есть функция page _ data для получения информации о странице. &lt;meta name=&quot;keywords&quot;...

61
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
27.09.2010, 23:51  [ТС]
Студворк — интернет-сервис помощи студентам
Так выглядит переделанный код:
PHP
1
2
3
4
5
6
7
8
<?php
      $cod = file_get_contents('http://lorebook.lotro.com/wiki/Armour:Harbinger%27s_Cloak');
      $classes = array('itembind','itemtype','itemarmor','itemdurability','itemsturdiness','itemrequirement');
      $regexp = "#<div class=\"$name[^>]*>(.+?)</div>#si";
      foreach ($classes as $name)
      if (preg_match($regexp, $cod, $match)) $result[$name] = $match[1];
      $sql = "INSERT INO en_cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".implode("','", array_values($result))."');"
?>
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
27.09.2010, 23:55
Сорри. Проблема интерполяции строки.
Правильно будет так:

PHP
1
$regexp = "#<div class=\"{$name}[^>]*>(.+?)</div>#si";
Добавлено через 1 минуту
PHP находил после $name квадратную скобочку, и думал, что мы будем указывать элемент массива.

Добавлено через 3 минуты
Цитата Сообщение от Curse Посмотреть сообщение
PHP
1
2
3
      $regexp = "#<div class=\"$name[^>]*>(.+?)</div>#si";
         foreach ($classes as $name)
         if (preg_match($regexp, $cod, $match)) $result[$name] = $match[1];
Так работать не будет. Но будет так:

PHP
1
2
3
4
5
   foreach ($classes as $name)
   {
      $regexp = "#<div class=\"$name[^>]*>(.+?)</div>#si";
      if (preg_match($regexp, $cod, $match)) $result[$name] = $match[1];
   }
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
27.09.2010, 23:56  [ТС]
Большое спасибо
Да, да... понял... переменная еще не объявлена была
0
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
12.10.2010, 23:16  [ТС]
У меня есть таблица в которой 25 столбцов. Подскажите, пожалуйста, как можно записать 5 имеющихся столбцов со значениями, а остальным присвоить значения по умолчанию в БД?

пользуюсь командой
PHP
1
mysql_query("INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".mysql_real_escape_string(implode("','", array_values($result)))."');");
Получается запрос
SQL
1
INSERT INTO En_Cloaks (`Item_Icon`, `Item_Name`, `Bindable`, `Equipment_Slot`, `Armour_Value`) VALUES('http://localhost/eq_cloak_anniversary_fellowship.png\',\'Harbinger\'s Cloak\',\'Bind on Acquire\',\'Light Armour \',\'56');
PHP ругается, считает данные одной строкой
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
13.10.2010, 06:40
Curse, Экранируйте одинарные кавычки...
PHP
1
mysql_query("INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".mysql_real_escape_string(implode("\',\'", array_values($result)))."');");
1
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
13.10.2010, 10:09
PHP
1
2
3
4
5
6
7
    function mysql_id($s) { return "`$s`"; }
    
    mysql_query(sprintf(
        'INSERT INTO En_Cloaks (%s) VALUES (%s)',
        implode(', ', array_map('mysql_id', array_keys($result))),
        implode(', ', array_map('mysql_real_escape_string', array_values($result)))
    ));
1
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
14.10.2010, 21:39
ostgals, я считаю это громоздким и не нужным... Но это дело вкуса.
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
15.10.2010, 10:12
Цитата Сообщение от romchiksoad Посмотреть сообщение
ostgals, я считаю это громоздким и не нужным... Но это дело вкуса.
Я бы согласился, но ваш код работать не будет. В этом легко убедиться, запустив такой пример:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
    $result = array(
        'one' => 'one thing',
        'two' => 'another thing'
    );
    
    mysql_connect('localhost', 'root', '');
    
    echo "INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".mysql_real_escape_string(implode("\',\'", array_values($result)))."');";
    
?>
Выведет следующую белиберду:
INSERT INTO En_Cloaks (`one`, `two`) VALUES('one thing\\\',\\\'another thing');
0
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
17.10.2010, 03:28  [ТС]
Как нужно изменить выражения, если требуется поиск в строке вида:
PHP
1
<div class="iteme">+22 Param1</div><div class="iteme">+102 Param2</div><div class="iteme">+22 Param3</div>
Код:
PHP
1
2
3
'Param1' => '#<div class="iteme">+(.+?) Param1</div>#si',
'Param2' => '#<div class="iteme">+(.+?) Param2</div>#si', 
'Param3' => '#<div class="iteme">+(.+?) Param3</div>#si',
Выдает:
Array
(
[Param2] => +22 Param1
+102
[Param1] => +22
[Param3] => +22 Param1
+102 Param2
+22
)
Нужны только цифры
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
17.10.2010, 22:34
PHP
1
2
3
'Param1' => '#<div class="iteme">\+(\d+) Param1</div>#si',
'Param2' => '#<div class="iteme">\+(\d+) Param2</div>#si', 
'Param3' => '#<div class="iteme">\+(\d+) Param3</div>#si',
1
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
18.10.2010, 14:45
ostgals,
Выведет следующую белиберду:
INSERT INTO En_Cloaks (`one`, `two`) VALUES('one thing\\\',\\\'another thing');
Ну во первых, у Вас включены магические кавычки. Что уже очень плохо.
А во вторых так смотреть нельзя. Эта функция для транспортировки данных в базу, а не для вывода в поток. В базу попадают только значимые слэши, экранирующих там не будет.

PS Упс... Не туда посмотрел. Таки да, именно ostgals прав. Лишний раз экранировать не след.
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
19.10.2010, 23:49  [ТС]
Подскажите, как можно заменить "/sub/link", если эта информация постоянно меняется и не требуется
<div class="myitem"><a href="/sub/link">(.+?)</a>

Спасибо, ostgals
Цитата Сообщение от ostgals Посмотреть сообщение
PHP
1
2
3
'Param1' => '#<div class="iteme">\+(\d+) Param1</div>#si',
'Param2' => '#<div class="iteme">\+(\d+) Param2</div>#si', 
'Param3' => '#<div class="iteme">\+(\d+) Param3</div>#si',
Как я понял можно изменить выражение на '#<div class="iteme">\+(\d+) (Param1|Param2|Param3)</div>#si' , вот только не понял как присвоить разные значения определенным элементам массива. Или в данном случае это не применимо?
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
20.10.2010, 10:36
Цитата Сообщение от Curse Посмотреть сообщение
Как я понял можно изменить выражение на '#<div class="iteme">\+(\d+) (Param1|Param2|Param3)</div>#si' , вот только не понял как присвоить разные значения определенным элементам массива. Или в данном случае это не применимо?
PHP
1
2
3
4
5
6
7
8
9
10
<?php
 
    $regexp = '#<div class="iteme">\+(\d+) (Param1|Param2|Param3)</div>#si';
    $text   = '<div class="iteme">+10 Param1</div><div class="iteme">+20 Param2</div><div class="iteme">+30 Param3</div>';
    
    preg_match_all($regexp, $text, $matches);
    
    foreach ($matches[2] as $i => $param) $params[$param] = $matches[1][$i];
    
    echo '<pre>'.print_r($params, true).'</pre>';
Цитата Сообщение от Curse Посмотреть сообщение
Подскажите, как можно заменить "/sub/link", если эта информация постоянно меняется и не требуется
<div class="myitem"><a href="/sub/link">(.+?)</a>
Не понял вопроса.
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
21.10.2010, 06:45  [ТС]
Например
HTML5
1
<div class="myitem"><a href="[a-zA-Z0-9]">(.+?)</a>
, не работает
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
21.10.2010, 10:11
Понял.

PHP
1
$regexp = '#<div class="myitem"><a [^>]+>(.+?)</a>#si';
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
25.10.2010, 06:54  [ТС]
а можно ли используя выражение
PHP
1
2
3
4
5
6
7
8
<?php
$cod = file_get_contents('http://localhost/Cloak_of_the_West-tower_%28Level_63%29');
$regexps3 = '#<div class="items[a-z]"><a [^>]+>(.+?)</a></div>#si';
preg_match_all($regexps3, $cod, $match);
?>
<pre>
<?php print_r($match); ?>
</pre>
Обычный массив, а не массив в массиве?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Array
(
    [0] => Array
        (
            [0] => Items
            [1] => Item1
            [2] => Item2
            [3] => Item3
            [4] => Item4
            [5] => Item5
            [6] => Item6
            [7] => Item7
        )
    [1] => Array
        (
            [0] => Items
            [1] => Item1
            [2] => Item2
            [3] => Item3
            [4] => Item4
            [5] => Item5
            [6] => Item6
            [7] => Item7
        )
)
Почему то первый массив получаю ссылки, второй - нужные данные.
Поиск по коду:
HTML5
1
2
3
4
5
6
7
8
9
10
11
<div class="itemset">
<div class="itemsn"><a href="localhost/Items">Items</a></div>
<div class="itemsps">
<div class="itemsp"><a href="localhost/Item1">Item1</a></div>
<div class="itemsp"><a href="localhost/Item2">Item2</a></div>
<div class="itemsp"><a href="localhost/Item3">Item3</a></div>
<div class="itemsp"><a href="localhost/Item4">Item4</a></div>
<div class="itemsp"><a href="localhost/Item5">Item5</a></div>
<div class="itemsp"><a href="localhost/Item6">Item6</a></div>
<div class="itemsp"><a href="localhost/Item7">Item7</a></div>
</div>
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
25.10.2010, 10:05
Цитата Сообщение от Curse Посмотреть сообщение
Обычный массив, а не массив в массиве?
PHP
1
<?php print_r($match[1]); ?>

Цитата Сообщение от Curse Посмотреть сообщение
Почему то первый массив получаю ссылки, второй - нужные данные.
Не почему-то, а по вполне закономерным причинам. В нулевой подмассив попадают строки, соответствующие всему регулярному выражению. А в первый - строки, соответствующие подзапросу в первых скобках - (.+?)
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
25.10.2010, 19:50  [ТС]
Цитата Сообщение от ostgals Посмотреть сообщение
Не почему-то, а по вполне закономерным причинам. В нулевой подмассив попадают строки, соответствующие всему регулярному выражению. А в первый - строки, соответствующие подзапросу в первых скобках - (.+?)
А как можно массив под индексом 1 занести в базу данных?

Добавлено через 3 часа 23 минуты
И что можно делать с найденными строками в 300 символов? А то пишет Undefined variable.
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
01.11.2010, 10:32
Цитата Сообщение от Curse Посмотреть сообщение
А как можно массив под индексом 1 занести в базу данных?
PHP
1
2
3
4
foreach ($match[1] as $value)
{
    // добавляем $value в БД
}
Цитата Сообщение от Curse Посмотреть сообщение
И что можно делать с найденными строками в 300 символов? А то пишет Undefined variable.
Этот момент я не понял. Что за строки? Где пишет?
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
01.11.2010, 16:40  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
149. <?php
150.  $regexps4 = array(
151. 'Set_Bonus' => '#<div class="itemseteff"><p>(.+?)</p></div>#si',
152.   );
153.    foreach ($regexps4 as $key => $exp)
154.      if (preg_match($exp, $cod, $match)) $result4[$key] = $match[1];
155. ?>
156. <pre>
157. <?php print_r($result4); ?>
158. </pre>
159. <?php
160. mysql_query("INSERT INTO Sets (`" . implode("`, `",array_keys($result4))."`) VALUES('".implode("','", 161. array_map('mysql_real_escape_string',array_values($result4)))."');");
162. echo mysql_error();
163. ?>
пишет
Code
1
2
3
4
5
6
7
8
9
Notice:  Undefined variable: result4 in C:\wamp\www\cloaks.php on line 157
Notice: Undefined variable: result4 in C:\wamp\www\cloaks.php on line 160
Warning: array_keys() expects parameter 1 to be array, null given in C:\wamp\www\cloaks.php on line 160
Warning: implode() [function.implode]: Invalid arguments passed in C:\wamp\www\cloaks.php on line 160
Notice: Undefined variable: result4 in C:\wamp\www\cloaks.php on line 160
Warning: array_values() expects parameter 1 to be array, null given in C:\wamp\www\cloaks.php on line 160
Warning: array_map() [function.array-map]: Argument #2 should be an array in C:\wamp\www\cloaks.php on line 160
Warning: implode() [function.implode]: Invalid arguments passed in C:\wamp\www\cloaks.php on line 160
Unknown column '' in 'field list'
а в базу массив с индексом 1 пишу так:
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$regexps3 = '#<div class="items[a-z]"><a [^>]+>(.+?)</a></div>#si';
preg_match_all($regexps3, $cod, $match);
?>
<pre>
<?php print_r($match[1]); ?>
</pre>
<?php
mysql_query("INSERT INTO Sets (`" . implode("`, `",array_keys($match[1]))."`) VALUES('".implode("','", array_map('mysql_real_escape_string',array_values($match[1])))."');");
echo mysql_error();
?>
это не правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2010, 16:40

Обновление информации на странице
в общем хочу создать сайт, на котором информация на странице будет меняться при перезагрузке. Информация должна браться из базы данных. с...

Проверка серверной информации о странице
Хотел посмотреть, какую информацию предоставляет сервер о странице, и для этого я сделал тестовый HTML файл, внедрив в него вот такой РНР...

Сообщение о изменнение информации на странице
Здраствуйте, помогите пожалуйста написать скрипт для проверки изменений на странице. Тоесть у нас есть сайт http://www.example.com/, и...

Вывод информации из MySql на странице
Добрый день вам О великие гуру)))) Мне очень нужна ваша помощь! В общем трабл у меня такой. Необходимо отобразить данные из...

Вывод информации на странице из базы данных
Здравствуйте. Научился с помощью массива выводить из базы данных информацию на главной странице, в нужном порядке. Так же выводятся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить сумму и количество положительных элементов массива, расположенных в четных строках. Решение: Создан документ с. . .
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности. . . .
Обработка трёх чисел: утроение и возведение в степень
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Даны три действительных числа. Утроить те из них, значения которых неотрицательны, и возвести в четвертую степень отрицательные. . . .
Расчёт стоимости яблок по весу
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Написать программу вычисления стоимости некоторого количества (по весу) яблок. Решение: Создан документ, с табличной частью. . .
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru