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