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

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

12.09.2010, 23:52. Показов 7495. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru