|
|
|
| Привет всем .. у меня проблема следующего характера :
Есть некоторый файл test.htm .. в нём тайтл хранится в следующем виде:
<title>
Батон
</title>
вот скрипт с РВ который ничего не находит:
<?php
$handle = fopen("test.htm","r");
while (!feof($handle)) {
$result = fgets($handle, 1024);
if (preg_match("/<title>[\n\r]*(.*)[\n\r]*<\/title>/i",$result,$arr)) break;
}
fclose($handle);
print_r ($arr);
?>
Но если сделать вот так: <title>Батон</title>
Сразу же находит ..
Помогите пожалуйста .. потому что я вошёл с состояние ступора (вроде элементарную вещь спрашиваю) от собственной беспомощности.
ЗЫ. Прошу прощения если такая тема уже была .. но порывшись в поиске я для себя ответа не нашёл ... | |
|
|
|
|
|
|
|
для: haw0k
(23.09.2006 в 17:44)
| | Так происходит, потому что fgets() читает одну строку из файла, рег. выражение тут ни причем ... можно использовать fread() | |
|
|
|
|
|
|
|
для: kasmanaft
(23.09.2006 в 18:15)
| | Спасибо Вам большое ! | |
|
|
|
|
|
|
|
для: haw0k
(23.09.2006 в 18:20)
| | хм ... а как всё таки лучше ? .. переписать РВ либо весь файл сделать одной большой строкой .. или всё таки предпочтительнее использовать fread() ? ..
Это я к чему .. просто в приведённом выше примере я убрал fgets() и использовал fread() по совету ув. Космонавта .. скрипт заработал .. т.е. извлёк из файла тайтл ..
Потом я решил извлечь из того же файла текст заключенный в тегах <div></div> используя ту же функцию fread() :
<?php
$handle = fopen("test.htm","rb");
while (!feof($handle)) {
$result = fread ($handle,filesize("test.htm"));
if ( preg_match ("/<div class=\"text\">(.*?)<\/div>/si",$result,$arr) ) {
for($i=0; $i < count($arr); $i++) {
echo "<br><br>".$arr[$i]."<br><br>";
}
}
}
fclose ($handle);
?>
|
И почему то на экране наблюдаю дублирование строк .. то есть например на выходе получаю :
Вася
Вася
Петя
Петя
Хотя должен был получить :
Вася
Петя
Вот такая вот проблемка :(
ЗЫ. И еще .. если я не собираюсь вносить в файл изменения то мне работать с функцией fopen() или file() .. логика подсказывает что нужно file() использовать .. но так ли это ? | |
|
|
|
|
|
|
|
для: haw0k
(23.09.2006 в 22:49)
| | Если нужно собрать содержимое файла с одну строку, то наверное, лучше воспользоваться ф-й file_get_contents ...
что насчет дублирования ...
получается при содержимом файла
<div class="text">Вася</div>
<div class="text">Петя</div>
|
? ? ?
если так, то должно бы быть просто вася-вася, без пети ... почему так происходит: в нулевой элемент массива $arr[0], попадает строка, подходящая под рег. выр-е ... то есть там не просто "Вася" будет, а "<div class="text">Вася</div>", далее, начиная с $arr[1] будет то, что попадает в скобки ("подмаски")
а для того, чтобы осуществить глобальный поиск (чтобы в РВ попал и "Петя"), нужно использовать ф-ю preg_match_all
В конечном счете получится что-то такое:
<?php
$result = file_get_contents("test.htm");
if ( preg_match_all ('|<div class="text">(.*?)</div>|si',$result,$arr) ) {
for($i=0; $i < count($arr[1]); $i++) {
echo "<br><br>".$arr[1][$i]."<br><br>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(23.09.2006 в 23:43)
| | >получается при содержимом файла
<div class="text">Вася</div>
<div class="text">Петя</div>
|
>? ? ?
Да .. образно структура именно такая ..
Спасибо большое за столь раскрытое обьяснение .. всегда знал что на softtime хорошие и понимающие люди .. | |
|
|
|