Что нового

Поиск текста рядом с заданной строкой

G

GenoTIP

Гость
Есть код:
Код:
<div class="imageElement">
<!-- Название-->
<h3>Арт: 0367</h3>
<!--Описание-->
<p>Комплект борцовка+шорты аристократка</p>
<!-- Ссылка на большое изображение-->
<a href="galwcom/images/big2.jpg" title="смотреть увеличенное изображение" class="open" target="_blank"></a>
<!-- Ссылка на среднее изображение-->
<img src="galwcom/images/middle2.jpg" class="full" />
<!-- Ссылка на миниатюру-->
<img src="galwcom/images/mini2.jpg" class="thumbnail" />
</div>
Например, я забиваю в поиск "Комплект борцовка+шорты аристократка", мне нужно найти в вышеуказанном коде Арт, что находится выше "Комплект борцовка+шорты аристократка" и ссылку на картинку, помогатие написать шаблон, нужно именно так, чтобы использовалась заданная строка и поиск происходил рядом с ней, так же например задано "0367" значит нужно найти название и ссылку на картинку
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$file=FileRead(@ScriptDir&'\123')
$str=StringRegExp($file,'(?si)<div class="imageElement">.*?<h3>Арт: (\d+)</h3>.*?'& _
'<p>Комплект борцовка\+шорты аристократка</p>.*?<a href="(.*?)".*?</div>',1)
MsgBox(0,'',$str[0]&@CRLF&$str[1])
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Автор
G

GenoTIP

Гость
OffTopic:
решение от sngr не рабочее или не подходило, не помню точно, но я решил проблему иначе.. по этому собственно тема и не решена
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
GenoTIP [?]
но я решил проблему иначе..
а решение предоставить, не? никак? отличный пользователь форума. я бы сказал "образцовый"
 
Автор
G

GenoTIP

Гость
В общем решил проблему на php, но решение можно использовать на любом другом языке.. сам пример можно посмотреть на сайте заказчика http://textil.tom.ru/ , заполнив форму поиска.
Сайт был построен так, что вся информация хранилась в html, нужно было организовать поиск и конечно же выход один (на мой не шибко опытный взгляд) - использование регулярных выражений.
Так как каждая строка типа "<h3>Арт: 0367</h3>" или "<p>Комплект борцовка+шорты аристократка</p>" уникальна и к тому же поиск должен проходить по артикулу и названию + структура самого блока <div class="imageElement"> всегда остается неизменной, я решил сначала для поиска по артикулу парсить арт из строки "<h3>Арт: 0367</h3>" потом опустить на 2 строки ниже и получить уже название, еще на 2 строки ниже и получить ссылку на изображение и так далее.. то же самое и с поиском по названию, гдето убавить 2 строки где-то прибавить.

php код поиска: ($query переменная, в которую заносится текст из формы поиска, пост запросом)
Код:
<?php 
    if (isset($_POST['query']))
    {
    $query = $_POST['query'];
    }
      
    
	
	$htmls_array = array(0 => 'boy.html', 'girl.html', 'man.html','new.html','womcomplect.html','wommykof.html','womplavki.html','womshorleg.html');
	$htmls_name_array = array(0 => 'Детские модели - Для мальчиков', 'Детские модели - Для девочек', 'Мужские модели - Все модели','Новые модели - Новинки','Женские модели - Женские комплекты','Женские модели - Женские майки, кофты, боди','Женские модели - Женские плавки, шортики','Женские модели - Женские шорты, леггинсы');
    //$file_arr = file(getcwd().'/'.'man.html');
for($id_html=0;$id_html<count($htmls_array); $id_html++){
	$col = 0;
	$col_array = array();
	$line_num_arr = array();
	$maxColInString = 4;
	$maxString =1;
	$error=0;
	$file_arr = file(getcwd().'/'.$htmls_array[$id_html]);
	foreach ($file_arr  as $line_num => $line) {
            $test = preg_match ("#$query#",strip_tags($file_arr[$line_num]) ,$find);
			if ($test == 1){
			foreach($find as $findview){
				array_push($col_array, "");
			}
			$col = count($col_array);
			if ($maxColInString<$col){ 
				$maxString = ceil($col/$maxColInString);
			}
			//echo $maxString;
			}
	}
		foreach ($file_arr  as $line_num => $line) {
		$test = preg_match ("#$query#",$file_arr[$line_num] ,$find);
			if ($test == 1){
				$error = 1;
				$line_num_find = $line_num;
				array_push($line_num_arr , $line_num_find);	
			}	
		}	
    //$file_arr = preg_replace("#[\s]#",'',$file_arr);
    if (is_numeric($query)) {
	if (strlen($query)>=2) {
        echo "Поиск по артикулу <em>" .$query. '</em>, в каталоге <em>' .$htmls_name_array[$id_html] .'</em>

';
		echo "<table>";
		for ($row = 0; $row <$maxString; $row++) {
				echo "<tr>";
							for($i=0;$i<$col;$i++){
							//echo $col.'
';
							//echo $line_num_arr[$i].'
';
							if($i==4){$col = $col - 5;$i=$i+5;}
							$id = array_pop($line_num_arr);
							if (isset($file_arr[$id])){
							$ok = preg_match ('#Арт: (\d+)#',$file_arr[$id] ,$find_art);}
							if ($ok == 1){
								preg_match ('#<p>(.*?)<\/p>#',$file_arr[$id+2],$find_name);
								preg_match ('#\<a href\=\"(.*?[.jpg|.png|.gif])"#',$file_arr[$id+4] ,$find_img);
								preg_match ('#\<img src\=\"(.*?[.jpg|.png|.gif])"#',$file_arr[$id+6] ,$find_img_mini);
							}
							echo "<td>";
							if (isset($find_name[1])){//echo "
".$find_name[1] ."
";
							//echo "Фото: <a href ='".$find_img[1]."'>...".$find[0]."...</a>" ."
";
							if (isset($find_img[1])&& isset($find_img_mini[1])){echo "<a href ='".$find_img[1]."' class='nivoZoom center'><img src='".$find_img_mini[1]."' width='133' height='180' class='img_search'><div class='nivoCaption'>".$find_name[1].". Арт: (".$find_art[1].")</div></a>" ."
";}
							if (isset($find_art[1])){echo "<center>Арт: ".$find_art[1] ."</center>
";}
							
							echo "</td>";
							}
							}
				
				echo "</tr>";	
			
		}
		}
		echo "</table>";
	
        if ($error == 0){
                echo '<b> - Ничего не найдено</b>' .'

';
        }
        
    } else {
		if (strlen($query)>=3) {
        echo "Поиск по названию: <em>" .$query. '</em>, в каталоге <em>' .$htmls_name_array[$id_html] .'</em>

';
        echo "<table>";
		for ($row = 0; $row < $maxString; $row++) {
				echo "<tr>";
							for($i=0;$i<$col;$i++){
								//echo $line_num_arr[$i].'
';
								if($i==4){$col = $col - 5;$i=$i+5;}
								$id = array_pop($line_num_arr);
								if (isset($file_arr[$id])) {
									$ok = preg_match ('#<p>(.*?)<\/p>#',$file_arr[$id],$find_name);}
										if ($ok == 1){
											if (isset($file_arr[$id])) {preg_match ('#(?s)Арт: (\d+)#',$file_arr[$id-2] ,$find_art);
											preg_match ('#\<a href\=\"(.*?[.jpg|.png|.gif])"#',$file_arr[$id+2] ,$find_img);
											preg_match ('#\<img src\=\"(.*?[.jpg|.png|.gif])"#',$file_arr[$id+4] ,$find_img_mini);
										}
									echo "<td>";
									if (isset($find_name[1])){//echo "
".$find_name[1] ."
";
									//echo "Фото: <a href ='".$find_img[1]."'>...".$find[0]."...</a>" ."
";
									if (isset($find_img[1])&& isset($find_img_mini[1])){echo "<a href ='".$find_img[1]."' class='nivoZoom center'><img src='".$find_img_mini[1]."' width='133' height='180' class='img_search'><div class='nivoCaption'>".$find_name[1].". Арт: (".$find_art[1].")</div></a>" ."
";}
									if (isset($find_art[1])){echo "<center>Арт: ".$find_art[1] ."</center>
";}
									echo "</td>";
									}
									}
									
							}
				
				echo "</tr>";	
			
			}
		echo "</table>";
	
        if ($error == 0){
                echo '<b> - Ничего не найдено</b>' .'

';
        }
        
    }
}
}
    ?>
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
GenoTIP
Дайте, пожалуйста, ссылку на страницу где можно посмотреть код из поста №1.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
На сайте я не нашёл приведённый в первом посте html код.
В поиск забил строку "Комплект борцовка+шорты аристократка", получил "Ничего не найдено"
Странно как-то.
 
Верх