Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] PHP|регулярные выражения, preg_match

Ответить
Настройки темы
[решено] PHP|регулярные выражения, preg_match

Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Здравствуйте!
Никак не могу разобраться почему этот код работает неправильно:

PHP код: Выделить весь код

preg_match('/http:\/\/[0-9_a-zA-Z.\/]*'.$name.'/'$TextBody$TempRegExp); 


Он должен возвращать в $TempRegExp[0] ссылку. Всё вроди норм, но ссылки такого типа:
Код: Выделить весь код
http://hghgf.ru/yukuioui/4543.ac4608a62f7e51286fad6f253/Mozila_Firefox.rar.html
Он выводит так:
Код: Выделить весь код
http://letitbit.net/download/4543.ac4608a62f7e51286fad6f253/Mozila
Т.е. фильтрация работает только до знака "_", хотя он присутствует в рег. выражении:
Код: Выделить весь код
[0-9_a-zA-Z.\/]
Помогите пожалуйста, что не так?

-------
Хочу научиться писать драйвера на с++


Отправлено: 15:07, 04-01-2010

 

Deadooshka


Сообщения: 2514
Благодарности: 690

Профиль | Отправить PM | Цитировать


потому что экранировать спец-символы надо...
лучше так:
PHP код: Выделить весь код

preg_match('{http\:\/\/[\S]*' preg_quote($name) . '}i'$TextBody$TempRegExp); 


Это сообщение посчитали полезным следующие участники:

Отправлено: 18:37, 04-01-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2514
Благодарности: 690

Профиль | Отправить PM | Цитировать


Цитата morgan1991:
фильтрация работает только до знака "_", хотя он присутствует в рег. выражении:
Код:
[0-9_a-zA-Z.\/]
Помогите пожалуйста, что не так? »
Вспомнил (у меня был такой затык)... знак _ в символьном классе нельзя располагать между диапазонами, а лучше в самом конце класса
Код: Выделить весь код
[0-9a-zA-Z\.\/\_]
. Это фигня недокументированная (не видел такого), поэтому пришел к этому опытным путем...

Отправлено: 18:58, 04-01-2010 | #3


Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Цитата Sham:
потому что экранировать спец-символы надо... »
хмм...
Значит не тут ошибка была, а здесь:
PHP код: Выделить весь код

preg_match('/name="name" value="[0-9,a-z,A-Z,.]*/'$Text$TempRegExp);
$TempRegExp explode('name="name" value="'$TempRegExp[0]);
$name $TempRegExp[1]; 

Никак не разберусь в этих выражениях...
Пробовал так (по аналогии ) :

PHP код: Выделить весь код

preg_match('{name="name" value="[\S]*}i'$Text$TempRegExp);
$TempRegExp explode('name="name" value="'$TempRegExp[0]);
$name $TempRegExp[1]; 

Так:
PHP код: Выделить весь код

preg_match('/name="name" value="[\S]*/'$Text$TempRegExp);
$TempRegExp explode('name="name" value="'$TempRegExp[0]);
$name $TempRegExp[1]; 

И всё не работает...

Цитата Sham:
а лучше в самом конце класса »
Ни так:
PHP код: Выделить весь код

preg_match('/name="name" value="[0-9,a-z,A-Z,.,_]*/'$Text$TempRegExp);

$TempRegExp explode('name="name" value="'$TempRegExp[0]);
$name $TempRegExp[1]; 

Ни так:
PHP код: Выделить весь код

preg_match('/name="name" value="[0-9a-zA-Z._]*/'$Text$TempRegExp);

$TempRegExp explode('name="name" value="'$TempRegExp[0]);
$name $TempRegExp[1]; 

Не пашет...
А с этим всё норм, спс...
Цитата Sham:
лучше так:
PHP код:
preg_match('{http\:\/\/[\S]*' . preg_quote($name) . '}i', $TextBody, $TempRegExp); »

-------
Хочу научиться писать драйвера на с++


Отправлено: 19:09, 04-01-2010 | #4


Deadooshka


Сообщения: 2514
Благодарности: 690

Профиль | Отправить PM | Цитировать


Цитата morgan1991:
value="[0-9,a-z,A-Z,.,_] »
запятые то зачем? если не входят в класс, то не нужны, тем более несколько...
Цитата morgan1991:
/name="name" value="[0-9a-zA-Z._]*/ »
если ссылка в value и нужно ее вытащить, то здесь нужна подмаска ()

PHP код: Выделить весь код

if
(
    
$name &&
    
preg_match
    
(
        
'{name\=\"name\"\s+value\=\"(http\:\/\/[^\s\"]*' preg_quote($name) . ')\"}i',
        
$TextBody,
        
$TempRegExp
    
)
)

echo 
$TempRegExp[1]; // ссылка тут 

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:24, 04-01-2010 | #5


Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Цитата Sham:
если ссылка в value и нужно ее вытащить, то здесь нужна подмаска () »
Не совсем так, с $name была ошибка, теперь в неё приходят нормальные данные.
Суть скрипта в следующем, он выковыривает имя в переменную $name затем получает другой текст и с помощью полученной $name получаем ссылку. Но теперь вот это не работает:
PHP код: Выделить весь код

preg_match('{http\:\/\/[\S]*' preg_quote($name) . '}i'$TextBody$TempRegExp);

$OpenFile $TempRegExp[0]; 

В $name приходит test_test.rar, затем скрипт должен выковырять ссылку в конце которой стоит test_test.rar, но он выковыривает только если $name к примеру = testtest.rar

-------
Хочу научиться писать драйвера на с++


Отправлено: 20:57, 04-01-2010 | #6


Deadooshka


Сообщения: 2514
Благодарности: 690

Профиль | Отправить PM | Цитировать


на самом деле, если вытаскиваем из конкретного уникального тега, то $name вообще необязателен.
PHP код: Выделить весь код

if
(
    
$name &&
    
preg_match
    
(
        
'{name\=\"name\"\s+value\=\"(http\:\/\/[^\s\"]+)\"}i',
        
$TextBody,
        
$TempRegExp
    
)
)

echo 
$TempRegExp[1]; 

если речь идет о летитбит.нет, то там value без http (только имя файла)... т.е. в регулярном выражении "http://" не нужно.
HTML код: Выделить весь код
<input type="hidden" name="name" value="Flash_Slideshow_Maker_Professional_4.90___Rus.rar" />

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:10, 05-01-2010 | #7


Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Цитата Sham:
то $name вообще необязателен. »
Неееее.
Мне нужен $name его потом нужно постом моного раз отправлять.
+ если не буду знать его то не смогу выдрать ссылку из текста, она не в теге, а просто <a href="Ссылка"></a>...
там ссылка такого типа:
Код: Выделить весь код
http://94.198.240.101/downloadp3/8476.8f9d65b794659f30f685b0fa6_RSFpq0JD7LvY/1150798/letitbit.net/MozilaFirefox.rar
Если не буду знать имя файла, как её выковыряю?
А если $name = Mozila_Firefox.rar, тогда ссылка должна быть:
Код: Выделить весь код
http://94.198.240.101/downloadp3/8476.8f9d65b794659f30f685b0fa6_RSFpq0JD7LvY/1150798/letitbit.net/Mozila_Firefox.rar
А он возвращает пустую строку, хотя $name действительно = Mozila_Firefox.rar.
это 100% из-за того, что в $name присутствует _. Как можно всёже выковырять ссылку

-------
Хочу научиться писать драйвера на с++


Отправлено: 13:26, 05-01-2010 | #8


Deadooshka


Сообщения: 2514
Благодарности: 690

Профиль | Отправить PM | Цитировать


выполните этот код
PHP код: Выделить весь код

$name 'Mozila_Firefox.rar';

$TextBody 'sdfsdf sdf <a href="http://94.198.240.101/downloadp3/8476.8f9d65b794659f30f685b0fa6_RSFpq0JD7LvY/1150798/letitbit.net/Mozila_Firefox.rar">sdfsdfsdf</a> sdfsdf sdfsdf sdfasdf';

if
(
    
preg_match
    
(
        
'{http\:\/\/[\S]*' preg_quote($name) . '}i',
        
$TextBody,
        
$TempRegExp
    
)
)
    echo 
$TempRegExp[0];
else
    echo 
'Не совпало'

работает железно... смотрите у себя.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:52, 05-01-2010 | #9


Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Sham, спасибо огромнейшее, всё заработало.
Моя дырявая голова забыла про ещё один элемент, который равен томуже названию файла
PHP код: Выделить весь код

preg_match('/name="realname" value="[0-9a-zA-Z._]*/'$Text$TempRegExp); 


-------
Хочу научиться писать драйвера на с++


Отправлено: 16:05, 05-01-2010 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] PHP|регулярные выражения, preg_match

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
регулярные выражения Ginger Вебмастеру 60 21-03-2012 01:11
Разное - PHP - регулярные выражения: HELP GoldenOrb Программирование и базы данных 10 08-09-2008 16:47
PHP - регулярные выражения: HELP GoldenOrb Вебмастеру 13 18-07-2008 16:05
PHP. Регулярные выражения и русские символы. Prisoner Вебмастеру 3 16-01-2004 14:31
Регулярные выражения est Хочу все знать 6 02-10-2002 14:17




 
Переход