Старый 11.01.2011, 10:22   #1   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
PHP скрипт. GET_CONTENTS (preg_match_all было)

preg_match_all("!<a"."(.*)"."<\/a><\/div>!m",$file,$matches);


тут есть недочет, который я сам никак не могу исправить.
СМЫСЛ В ТОМ, чтобы выдрать ссылку перед окончанием дива.
тоесть последнюю ссылку в ДИВе.
НО! если их в ДИВе много, скрипт выдирает их все,начиная с первой...
КАК СДЕЛАТЬ,чтобы только ОДНУ, стоящуу перед </div> выдирало???

Последний раз редактировалось AlexanderSergeev; 15.01.2011 в 19:20.
  Ответить с цитированием
Старый 11.01.2011, 10:29   #2   
+79038594250
 
Сообщений: 1,493
Регистрация: 31.01.2005
Возраст: 41

1000w вне форума Не в сети
на вскидку: preg_match_all('!<a.*[^<]{*}<\/a><\/div>!m',$file,$matches);

пс а вообще в нотации PCRE есть кватификатор жадности "?"
т.е. можно сделать так:
preg_match_all('!<a.*?<\/a><\/div>!m',$file,$matches);
  Ответить с цитированием
Старый 11.01.2011, 10:45   #3   
+79038594250
 
Сообщений: 1,493
Регистрация: 31.01.2005
Возраст: 41

1000w вне форума Не в сети
и лучше еще использовать модификатор "i" для регистронезависимого поиска
  Ответить с цитированием
Старый 11.01.2011, 11:05   #4   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
проверю - напишу. про ? знал, не знал как его юзать правильно. ^< тоже вроде пробывал. вобщем проверю конкретный ваш вариант (он немного отличается от моих) и отпишусь. СПАСИБО
  Ответить с цитированием
Старый 11.01.2011, 12:35   #5   
Наночлен
 
Аватар для DRON-ANARCHY
 
Сообщений: 30,595
Регистрация: 06.09.2006
Возраст: 36

DRON-ANARCHY вне форума Не в сети
Либо я чего-то не понял, либо preg_match_all и должен все выдирать, складывая в массив.
Что мешает взять из массива последнюю запись? Или надо именно красиво, одной строчкой?)
  Ответить с цитированием
Старый 11.01.2011, 14:22   #6   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
есть на странице МНООООГО дивов. в каждом из них и ссылки...нужна каждая перед концом дива.както так)))
  Ответить с цитированием
Старый 11.01.2011, 15:59   #7   
Наночлен
 
Аватар для DRON-ANARCHY
 
Сообщений: 30,595
Регистрация: 06.09.2006
Возраст: 36

DRON-ANARCHY вне форума Не в сети
А... Теперь понял
  Ответить с цитированием
Старый 12.01.2011, 23:12   #8   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
preg_match_all("!(.*)<form"."(.*)"."</form>!i","<form action='1' method='post' id='1'><p><input type='text' name='1' id='1' value='' size='1' tabindex='1'/><label for='1'><small>Имя</small></label></p></form>",$matches);

работает исправно...

НО!
если поставить в любом месте "ENTER",тоесть перенос строки,ВСЁ ОБЛАМЫВАЕТСЯ!!!
как это предотвратить...?
тоесть разрешить перенос?
  Ответить с цитированием
Старый 13.01.2011, 09:03   #9   
+79038594250
 
Сообщений: 1,493
Регистрация: 31.01.2005
Возраст: 41

1000w вне форума Не в сети
модификатор "m"
пс. зачем двойные кавычки используешь? и конкатенацию?
  Ответить с цитированием
Старый 13.01.2011, 13:01   #10   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
Про кавычки и второе слово поясни пожалуйста,учту..а модификатор эм чтото не помогает.как еще предотвратить прекращение работы скрипта изза одного ИЛИ нескольких переносов строк?
  Ответить с цитированием
Старый 13.01.2011, 13:23   #11   
+79038594250
 
Сообщений: 1,493
Регистрация: 31.01.2005
Возраст: 41

1000w вне форума Не в сети
"!(.*)<form"."(.*)"."</form>!i" - зачем так пишешь? можно ведь так: '!(.*)<form(.*)</form>!i' двойные кавычки используются в особых случаях

для многострочного поиска без модификатора можно написать такое выражение:
'!(.*[/r/n]{*}.*)<form(.*[/r/n]{*}.*)</form>!i'
  Ответить с цитированием
Старый 13.01.2011, 19:04   #12   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
Знаете что)...вот это конечно глупо наверно было,но попробывал...
И СРАБОТАЛО)))
но теперь пробую перенести в мой вариант и чтото никак...
вобщем вот два варианта..
1)preg_replace ("!\n!i","",$file); -не пашет, \n просто так ввел,для примера.

2)preg_replace ("!
!i","",$file);

работает)заменяет перевод строки.именно в коде...

как вот теперь это в выражении указать?

Последний раз редактировалось AlexanderSergeev; 13.01.2011 в 19:32.
  Ответить с цитированием
Старый 13.01.2011, 19:39   #13   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
ВОТ. НА ПРОСТО ПРИМЕРЕ, ПОКАЖИТЕ ПОЖАЛУЙСТА!!!
никак не могу нужное выражение написать!!!

1)preg_match_all("!<form(.*)</form>!i","<form><textarea>dsfsdfsdfsdf456456456</textarea></form>",$matches);

работает

2)preg_match_all("!<form(.*)</form>!i","<form><textarea>dsfsdfsdfsdf
456456456</textarea></form>",$matches);

не работает


Нужно чтобы во втором варианте,где цифры насильственно еще в коде перенесены на следующую строку, выдернуть все между тегами форм.
  Ответить с цитированием
Старый 13.01.2011, 21:37   #14   
где она?
 
Аватар для peromax
 
Сообщений: 137
Регистрация: 09.09.2008

peromax вне форума Не в сети
preg_match_all("!<form(.*)</form>!i","<form><textarea>dsfsdfsdfsdf\s*456456456 </textarea></form>",$matches);
  Ответить с цитированием
Старый 13.01.2011, 21:38   #15   
где она?
 
Аватар для peromax
 
Сообщений: 137
Регистрация: 09.09.2008

peromax вне форума Не в сети
где \s – любой пробельный символ(tab, space, enter ...)
  Ответить с цитированием
Старый 14.01.2011, 10:36   #16   
Наночлен
 
Аватар для DRON-ANARCHY
 
Сообщений: 30,595
Регистрация: 06.09.2006
Возраст: 36

DRON-ANARCHY вне форума Не в сети
peromax, а ежели в textarea многа переносов строк?
И вообще, не везде же будут именно эти dsfsdfsdfsdf и 456456456

PS: если чо, я не так силен в програмировании и пытаюсь разобраться в вопросе тоже для общего развития))
  Ответить с цитированием
Старый 14.01.2011, 18:53   #17   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
preg_match_all("!^<form(.*)</form>$!isD",$a,$matches); вот решение. спасибо знакомому!
  Ответить с цитированием
Старый 15.01.2011, 00:24   #18   
где она?
 
Аватар для peromax
 
Сообщений: 137
Регистрация: 09.09.2008

peromax вне форума Не в сети
Цитата:
Сообщение от DRON-ANARCHY Посмотреть сообщение
а ежели в textarea многа переносов строк?
DRON-ANARCHY, вообще-то символ * и есть много /s(перенос строк, пробелы, табуляции)

psihOZ, мой тоже работает
  Ответить с цитированием
Старый 15.01.2011, 19:05   #19   
Наночлен
 
Аватар для DRON-ANARCHY
 
Сообщений: 30,595
Регистрация: 06.09.2006
Возраст: 36

DRON-ANARCHY вне форума Не в сети
peromax, то есть если будет
dsfsdfsdfsdf 456456456
с1с2с3с4с5с6с67с8с9
1

то скрипт все верно обработает?
  Ответить с цитированием
Старый 15.01.2011, 19:22   #20   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
DRON-ANARCHY,
peromax, еще пришлось то выражение подправить ...и в итоге вот что вышло...и сейчас работает!
preg_match_all("!<form(.*)</form>!isD",$a,$matches);



Warning: file_get_contents(http://kellua.com) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in лалала.php

вобщем суть в том,что несколько сайтов последовательно из базы берутся и с них загружается контент.КАК СДЕЛАТЬ ТАК,ЧТОБЫ ВМЕСТО ЭТОЙ ОШИБКИ ПРОСТО ПРОПУСКАЛСЯ ЭТОТ ЗЛОСЧАСТНЫЙ АДРЕС???????
я пробывал разные get_... и условия ставил...но в любом случае если не находит- выкидывает ошибку и не пашет дальше,а надо чтобы пропускал.

ничего не нагуглил.вдруг с этим тоже кто сталкивался?
  Ответить с цитированием
Старый 15.01.2011, 21:21   #21   
Наночлен
 
Аватар для DRON-ANARCHY
 
Сообщений: 30,595
Регистрация: 06.09.2006
Возраст: 36

DRON-ANARCHY вне форума Не в сети
psihOZ, ты сам на эту ссылку жмакни
Или чего надо? Сделать условие if(@file_get_contents('http://kellua.com')) {.....} ?

А вообще веселее высасывать через curl
  Ответить с цитированием
Старый 15.01.2011, 23:19   #22   
Форумец
 
Сообщений: 3,705
Регистрация: 02.08.2006

svga вне форума Не в сети
прямо уроки пехепе - "подбери регулярку, чтобы контента натырить" ))

ТС, колись давай уже - что ты там так мощна парсить собралсо?
  Ответить с цитированием
Старый 27.01.2011, 19:39   #23   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
спасибо всем. работает всё.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind