
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
PHP скрипт. GET_CONTENTS (preg_match_all было)
|
||
![]() |
|
|
Опции темы |
|
|
#1 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
PHP скрипт. GET_CONTENTS (preg_match_all было)
preg_match_all("!<a"."(.*)"."<\/a><\/div>!m",$file,$matches);
тут есть недочет, который я сам никак не могу исправить. СМЫСЛ В ТОМ, чтобы выдрать ссылку перед окончанием дива. тоесть последнюю ссылку в ДИВе. НО! если их в ДИВе много, скрипт выдирает их все,начиная с первой... КАК СДЕЛАТЬ,чтобы только ОДНУ, стоящуу перед </div> выдирало??? Последний раз редактировалось AlexanderSergeev; 15.01.2011 в 19:20. |
|
|
|
|
#2 |
|
+79038594250
Сообщений: 1,493
Регистрация: 31.01.2005
Возраст: 43
|
на вскидку: preg_match_all('!<a.*[^<]{*}<\/a><\/div>!m',$file,$matches);
пс а вообще в нотации PCRE есть кватификатор жадности "?" т.е. можно сделать так: preg_match_all('!<a.*?<\/a><\/div>!m',$file,$matches); |
|
|
|
|
#4 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
проверю - напишу. про ? знал, не знал как его юзать правильно. ^< тоже вроде пробывал. вобщем проверю конкретный ваш вариант (он немного отличается от моих) и отпишусь. СПАСИБО
|
|
|
|
|
#5 |
|
Наночлен
Сообщений: 30,594
Регистрация: 06.09.2006
Возраст: 38
|
Либо я чего-то не понял, либо preg_match_all и должен все выдирать, складывая в массив.
Что мешает взять из массива последнюю запись? Или надо именно красиво, одной строчкой?) |
|
|
|
|
#6 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
есть на странице МНООООГО дивов. в каждом из них и ссылки...нужна каждая перед концом дива.както так)))
|
|
|
|
|
#7 |
|
Наночлен
Сообщений: 30,594
Регистрация: 06.09.2006
Возраст: 38
|
А... Теперь понял
|
|
|
|
|
#8 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
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",тоесть перенос строки,ВСЁ ОБЛАМЫВАЕТСЯ!!! как это предотвратить...? тоесть разрешить перенос? |
|
|
|
|
#10 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
Про кавычки и второе слово поясни пожалуйста,учту..а модификатор эм чтото не помогает.как еще предотвратить прекращение работы скрипта изза одного ИЛИ нескольких переносов строк?
|
|
|
|
|
#11 |
|
+79038594250
Сообщений: 1,493
Регистрация: 31.01.2005
Возраст: 43
|
"!(.*)<form"."(.*)"."</form>!i" - зачем так пишешь? можно ведь так: '!(.*)<form(.*)</form>!i' двойные кавычки используются в особых случаях
для многострочного поиска без модификатора можно написать такое выражение: '!(.*[/r/n]{*}.*)<form(.*[/r/n]{*}.*)</form>!i' |
|
|
|
|
#12 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
Знаете что)...вот это конечно глупо наверно было,но попробывал...
И СРАБОТАЛО))) но теперь пробую перенести в мой вариант и чтото никак... вобщем вот два варианта.. 1)preg_replace ("!\n!i","",$file); -не пашет, \n просто так ввел,для примера. 2)preg_replace ("! !i","",$file); работает)заменяет перевод строки.именно в коде... как вот теперь это в выражении указать? Последний раз редактировалось AlexanderSergeev; 13.01.2011 в 19:32. |
|
|
|
|
#13 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
ВОТ. НА ПРОСТО ПРИМЕРЕ, ПОКАЖИТЕ ПОЖАЛУЙСТА!!!
никак не могу нужное выражение написать!!! 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); не работает Нужно чтобы во втором варианте,где цифры насильственно еще в коде перенесены на следующую строку, выдернуть все между тегами форм. |
|
|
|
|
#16 |
|
Наночлен
Сообщений: 30,594
Регистрация: 06.09.2006
Возраст: 38
|
peromax, а ежели в textarea многа переносов строк?
И вообще, не везде же будут именно эти dsfsdfsdfsdf и 456456456 PS: если чо, я не так силен в програмировании и пытаюсь разобраться в вопросе тоже для общего развития)) |
|
|
|
|
#17 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
preg_match_all("!^<form(.*)</form>$!isD",$a,$matches); вот решение. спасибо знакомому!
|
|
|
|
|
#19 |
|
Наночлен
Сообщений: 30,594
Регистрация: 06.09.2006
Возраст: 38
|
peromax, то есть если будет
dsfsdfsdfsdf 456456456 с1с2с3с4с5с6с67с8с9 1 то скрипт все верно обработает? |
|
|
|
|
#20 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
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_... и условия ставил...но в любом случае если не находит- выкидывает ошибку и не пашет дальше,а надо чтобы пропускал. ничего не нагуглил.вдруг с этим тоже кто сталкивался? |
|
|
|
|
#21 |
|
Наночлен
Сообщений: 30,594
Регистрация: 06.09.2006
Возраст: 38
|
psihOZ, ты сам на эту ссылку жмакни
Или чего надо? Сделать условие if(@file_get_contents('http://kellua.com')) {.....} ? А вообще веселее высасывать через curl
|
|
|
|
|
#23 |
|
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 32
|
спасибо всем. работает всё.
|
|
|