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

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

12.09.2010, 23:52. Показов 7408. Ответов 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
Ответ Создать тему
Новые блоги и статьи
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru